尝试在 Android 中创建文件时出现 FileNotFoundException
FileNotFoundException when trying to create a File in Android
我正在尝试使用 Jexcel API 创建一个 excel 文件并使用我的 phone 上的应用程序写入该文件。当我 运行 应用程序时,它会抛出一个 FileNotFoundException
。我什至尝试根据另一个此类问题的答案创建一个文本文件,但它会引发相同的错误。我已经在清单中提供了适当的权限,但我似乎仍然无法查明问题所在。
请帮忙。
这是我的代码
public WritableWorkbook createWorkbook(String fileName){
//Saving file in external storage
File sdCard = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File directory = new File(sdCard.getAbsolutePath() + "/bills");
//create directory if not exist
if(!directory.isDirectory()){
directory.mkdirs();
}
//file path
file= new File(directory, fileName);
if (file.exists())
Log.e(taf,"file created");
else
Log.e(taf,"file not created");
WorkbookSettings wbSettings = new WorkbookSettings();
wbSettings.setLocale(new Locale("en", "EN"));
wbSettings.setUseTemporaryFileDuringWrite(true);
WritableWorkbook workbook;
workbook=null;
try {
workbook = Workbook.createWorkbook(file, wbSettings);
Log.i(taf,"workbook created");
//Excel sheet name. 0 represents first sheet
WritableSheet sheet = workbook.createSheet("MyShoppingList", 0);
try {
sheet.addCell(new Label(0, 0, "Subject")); // column and row
sheet.addCell(new Label(1, 0, "Description"));
String title = "blaj";
String desc = "nxjdncj";
int i = 1;
sheet.addCell(new Label(0, i, title));
sheet.addCell(new Label(1, i, desc));
} catch (WriteException e) {
e.printStackTrace();
}
workbook.write();
try {
workbook.close();
} catch (WriteException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
return workbook;
}
执行时,打印日志消息“文件未创建”。我是 android 的新手,所以即使是最基本的问题也请指出。
谢谢。
实例化 File
不会创建文件,只会为您提供一个 File
实例,无论是否存在具有该特定路径和文件名的文件。
查看构造函数源码:
public File(String dirPath, String name) {
if (name == null) {
throw new NullPointerException("name == null");
}
if (dirPath == null || dirPath.isEmpty()) {
this.path = fixSlashes(name);
} else if (name.isEmpty()) {
this.path = fixSlashes(dirPath);
} else {
this.path = fixSlashes(join(dirPath, name));
}
}
要实际创建文件,您可以这样做:
if (!file.exists()) {
// file does not exist, create it
file.createNewFile();
}
您需要在下面添加一行:
file= new File(directory, fileName);
file.createNewFile();// add this line
希望您已经在清单文件中添加了权限。
我正在尝试使用 Jexcel API 创建一个 excel 文件并使用我的 phone 上的应用程序写入该文件。当我 运行 应用程序时,它会抛出一个 FileNotFoundException
。我什至尝试根据另一个此类问题的答案创建一个文本文件,但它会引发相同的错误。我已经在清单中提供了适当的权限,但我似乎仍然无法查明问题所在。
请帮忙。
这是我的代码
public WritableWorkbook createWorkbook(String fileName){
//Saving file in external storage
File sdCard = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File directory = new File(sdCard.getAbsolutePath() + "/bills");
//create directory if not exist
if(!directory.isDirectory()){
directory.mkdirs();
}
//file path
file= new File(directory, fileName);
if (file.exists())
Log.e(taf,"file created");
else
Log.e(taf,"file not created");
WorkbookSettings wbSettings = new WorkbookSettings();
wbSettings.setLocale(new Locale("en", "EN"));
wbSettings.setUseTemporaryFileDuringWrite(true);
WritableWorkbook workbook;
workbook=null;
try {
workbook = Workbook.createWorkbook(file, wbSettings);
Log.i(taf,"workbook created");
//Excel sheet name. 0 represents first sheet
WritableSheet sheet = workbook.createSheet("MyShoppingList", 0);
try {
sheet.addCell(new Label(0, 0, "Subject")); // column and row
sheet.addCell(new Label(1, 0, "Description"));
String title = "blaj";
String desc = "nxjdncj";
int i = 1;
sheet.addCell(new Label(0, i, title));
sheet.addCell(new Label(1, i, desc));
} catch (WriteException e) {
e.printStackTrace();
}
workbook.write();
try {
workbook.close();
} catch (WriteException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
return workbook;
}
执行时,打印日志消息“文件未创建”。我是 android 的新手,所以即使是最基本的问题也请指出。
谢谢。
实例化 File
不会创建文件,只会为您提供一个 File
实例,无论是否存在具有该特定路径和文件名的文件。
查看构造函数源码:
public File(String dirPath, String name) {
if (name == null) {
throw new NullPointerException("name == null");
}
if (dirPath == null || dirPath.isEmpty()) {
this.path = fixSlashes(name);
} else if (name.isEmpty()) {
this.path = fixSlashes(dirPath);
} else {
this.path = fixSlashes(join(dirPath, name));
}
}
要实际创建文件,您可以这样做:
if (!file.exists()) {
// file does not exist, create it
file.createNewFile();
}
您需要在下面添加一行:
file= new File(directory, fileName);
file.createNewFile();// add this line
希望您已经在清单文件中添加了权限。