Android写入SD卡文件夹
我使用下面的代码从我的服务器下载文件,然后将其写入到SD卡的根目录,它一切正常:
package com.downloader; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.os.Environment; import android.util.Log; public class Downloader { public void DownloadFile(String fileURL, String fileName) { try { File root = Environment.getExternalStorageDirectory(); URL u = new URL(fileURL); HttpURLConnection c = (HttpURLConnection) u.openConnection(); c.setRequestMethod("GET"); c.setDoOutput(true); c.connect(); FileOutputStream f = new FileOutputStream(new File(root, fileName)); InputStream in = c.getInputStream(); byte[] buffer = new byte[1024]; int len1 = 0; while ((len1 = in.read(buffer)) > 0) { f.write(buffer, 0, len1); } f.close(); } catch (Exception e) { Log.d("Downloader", e.getMessage()); } } }
但是,使用Environment.getExternalStorageDirectory();
意味着该文件将始终写入根/mnt/sdcard
。 是否可以指定一个文件夹来写入文件?
例如: /mnt/sdcard/myapp/downloads
干杯
EEF
File sdCard = Environment.getExternalStorageDirectory(); File dir = new File (sdCard.getAbsolutePath() + "/dir1/dir2"); dir.mkdirs(); File file = new File(dir, "filename"); FileOutputStream f = new FileOutputStream(file); ...
为Android清单添加权限
将此WRITE_EXTERNAL_STORAGE权限添加到您的应用程序清单。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="your.company.package" android:versionCode="1" android:versionName="0.1"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <!-- ... --> </application> <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> </manifest>
检查外部存储的可用性
您应该始终首先检查可用性。 外部存储上官方android文档的一个片段。
boolean mExternalStorageAvailable = false; boolean mExternalStorageWriteable = false; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { // We can read and write the media mExternalStorageAvailable = mExternalStorageWriteable = true; } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { // We can only read the media mExternalStorageAvailable = true; mExternalStorageWriteable = false; } else { // Something else is wrong. It may be one of many other states, but all we need // to know is we can neither read nor write mExternalStorageAvailable = mExternalStorageWriteable = false; }
使用一个Filewriter
最后,不要忘了关于FileOutputStream
,而是使用FileWriter
。 有关该类的更多信息,请参阅FileWriter javadoc 。 你可能想在这里添加一些错误处理来通知用户。
// get external storage file reference FileWriter writer = new FileWriter(getExternalStorageDirectory()); // Writes the content to the file writer.write("This\n is\n an\n example\n"); writer.flush(); writer.close();
在这里找到答案 – http://mytechead.wordpress.com/2014/01/30/android-create-a-file-and-write-to-external-storage/
它说,
/** * Method to check if user has permissions to write on external storage or not */ public static boolean canWriteOnExternalStorage() { // get the state of your external storage String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { // if storage is mounted return true Log.v("sTag", "Yes, can write to external storage."); return true; } return false; }
然后让我们使用这段代码实际写入外部存储:
// get the path to sdcard File sdcard = Environment.getExternalStorageDirectory(); // to this path add a new directory path File dir = new File(sdcard.getAbsolutePath() + "/your-dir-name/"); // create this directory if not already created dir.mkdir(); // create the file in which we will write the contents File file = new File(dir, "My-File-Name.txt"); FileOutputStream os = outStream = new FileOutputStream(file); String data = "This is the content of my file"; os.write(data.getBytes()); os.close();
这就是它。 如果现在你访问你的/ sdcard / your-dir-name /文件夹,你会看到一个名为 – My-File-Name.txt的文件,其代码中指定的内容。
PS: – 你需要以下权限 –
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
为了下载文件到SDCard下载或音乐文件夹
File downlodDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);// or DIRECTORY_PICTURES
不要忘记在清单中添加这些权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />