尝试将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模式下)。但我想这是另一个问题。
答案 0 :(得分:0)
如果你在设备操作系统版本安装android M及更多,你需要在运行时获取权限。单独添加清单是不够的。有关详细信息,请参阅this。
答案 1 :(得分:0)
您可以指定正在使用的外部存储设备(非SD卡),因为如果您使用的是Environment.getExternalStorageDirectory()
,那么它将为您提供SD卡存储的路径,类似于此{{ 1}}其中0表示主存储设备。