java.io.FileNotFoundException:/storage/emulated/0/MyPDFDocument/questions.pdf(没有这样的文件或目录)
所以,我试图实现的是将recycler视图内容保存在pdf文件中。我使用了PDFDocument类来实现这一点。我已经添加了权限 使用权限android:name=“android.permission.WRITE\u外部存储” 我不知道我做错了什么。我曾尝试更改存储的位置,但每次都出现相同的错误 如果有人能告诉我我做错了什么。以下是相关代码:java.io.FileNotFoundException:/storage/emulated/0/MyPDFDocument/questions.pdf(没有这样的文件或目录),java,android,Java,Android,所以,我试图实现的是将recycler视图内容保存在pdf文件中。我使用了PDFDocument类来实现这一点。我已经添加了权限 使用权限android:name=“android.permission.WRITE\u外部存储” 我不知道我做错了什么。我曾尝试更改存储的位置,但每次都出现相同的错误 如果有人能告诉我我做错了什么。以下是相关代码: if (selectedId == R.id.action_save_pdf) { // create a new document
if (selectedId == R.id.action_save_pdf) {
// create a new document
PdfDocument document = new PdfDocument();
// crate a page description
PdfDocument.PageInfo pageInfo =
new PdfDocument.PageInfo.Builder(100, 100, 1).create();
// start a page
PdfDocument.Page page = document.startPage(pageInfo);
// finish the page
document.finishPage(page);
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File root = Environment.getExternalStorageDirectory();
File dir = new File(root.getAbsolutePath() + "/MyPDFDocument");
if (!dir.exists()) {
dir.mkdir();
}
File filePath = new File(dir, "questions.pdf");
try {
document.writeTo(new FileOutputStream(filePath));
Toast.makeText(this, "Saved to PDF", Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "Save Unsuccessful!",
Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(this, "External Storage not available!", Toast.LENGTH_SHORT).show();
}
// close the document
document.close();
return true;
}
return super.onOptionsItemSelected(item);
}
提前谢谢你。我找到了自己的答案。实际上,在androidapi level>23中,您必须为写入外部存储请求运行时权限。由于它包含在危险权限中,因此必须提供运行时权限,以允许用户显式允许这些权限。因此,仅在清单中添加“写入外部存储”权限是行不通的 下面是我用来解决问题的链接
我认为这行代码是
文件路径=新文件(dir,“questions.pdf”)代码>创建必要的文件。@sunilsunny我试着按你说的做了。如果(!dir.exists()){dir.mkdir();}
仍然是相同的错误,应该是:如果(!dir.exists()){if(!dir.mkdir()){Toast(…无法使dir…);return;};}
。我确信目录没有创建。@sunil sunny应该有类似filePath.createNewFile()的内容;然后只创建该文件sunil sunny 56分钟前
。胡说八道newfileoutputstream(filePath)
将创建该文件。好的,如果目录存在并授予权限。认为这行文件filePath=new File(dir,“questions.pdf”);创建必要的文件代码>否。它不会。但这也不是必需的。