【发布时间】:2016-11-24 06:10:48
【问题描述】:
尝试将 PDF 文件(模板)复制到外部存储(非 SD 卡)中的自定义目录。
public void copyPDFToExternal(String newFileName) throws IOException {
// Create directory folder if it doesnt exist.
File folder = new File(Environment.getExternalStorageDirectory() +
File.separator + "pdfFolder");
if (!folder.exists()){
folder.mkdir();
}
// Copy template
InputStream in = getResources().openRawResource(R.raw.pdf_template);
FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory() +
File.separator + "pdfFolder/"+newFileName+".pdf");
byte[] buff = new byte[1024];
int read = 0;
try {
while ((read = in.read(buff)) > 0 ) {
out.write(buff, 0, read);
}
} finally {
in.close();
out.close();
}
}
我在 AndroidManifest.xml 中添加了以下内容,而不是在应用程序标签中。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
完全错误:http://pastebin.com/TBtbekiB
如果您需要我发布任何其他内容,请告诉我。
我哪里出错了?
更新:不再崩溃,但现在似乎什么也没做... mkdirs 返回 true。
public void copyPDFToExternal(String newFileName) throws IOException {
File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +
"/test/");
if (!folder.exists()){
if (!folder.mkdirs()){
eme.setText("Failed");
return;
};
}
InputStream in = getResources().openRawResource(R.raw.ohat);
FileOutputStream out = new FileOutputStream(folder.getAbsolutePath() +"/"+newFileName+".pdf");
byte[] buff = new byte[1024];
int read = 0;
try {
while ((read = in.read(buff)) > 0 ) {
out.write(buff, 0, read);
}
} finally {
in.close();
out.close();
}
}
我还添加了一个权限请求,这有点长所以使用pastebin。
编辑 2:
看来它确实有效,只是当设备连接到计算机时(在 MTP 模式下)看不到目录。但我想这是另一个问题。
【问题讨论】:
-
尝试使用 Environment.getExternalStorageDirectory().getAbsolutePath();如果您要指定文件夹,则首先在文件引用上运行 mkdirs()。
-
同样的问题。抛出 java.io.FileNotFoundException: /storage/emulated/0/pdfFolder/testfile.pdf: 如果 folder.exists() 返回 false,我运行 folder.mkdir(),这是错误的方法吗?
-
这样没关系,mkdirs 只是创建中间的所有文件夹,尝试创建一个只有路径而不是pdf名称的文件引用,然后创建它。
-
抱歉,还是安卓新手,什么意思?
-
新文件(Environment.getExternalStorageDirectory().getAbsolutePath()+"/test/");像这样的东西。
标签: android android-file android-external-storage