Java Android应用程序:文件存在时出现FileNotFound错误
在尝试读取内部存储中的文件时,我遇到了filenotfound;我非常确定该文件存在于我期望的位置,并且具有适当的权限 我正在创建一个android应用程序,其中我将一个字符串数组列表保存到应用程序内部存储的文件中,然后尝试随机访问文件中的各个行。我在同一个类中编写文件和读取文件,所以我觉得我不应该有类似文件路径和命名约定的问题 我验证或尝试过的事情:Java Android应用程序:文件存在时出现FileNotFound错误,java,android,file,Java,Android,File,在尝试读取内部存储中的文件时,我遇到了filenotfound;我非常确定该文件存在于我期望的位置,并且具有适当的权限 我正在创建一个android应用程序,其中我将一个字符串数组列表保存到应用程序内部存储的文件中,然后尝试随机访问文件中的各个行。我在同一个类中编写文件和读取文件,所以我觉得我不应该有类似文件路径和命名约定的问题 我验证或尝试过的事情: 我已经打开了Android设备监视器和 内容和位置与预期一致 文件权限为-rw rw-- 我抓取了read和write方法中的user.dir
- 我已经打开了Android设备监视器和 内容和位置与预期一致李>
- 文件权限为-rw rw--
- 我抓取了read和write方法中的user.dir,它们都返回“/”似乎不正确,但write方法可以工作(因为文件在那里)
- 检查了大量示例以仔细检查格式(文件名和方法使用)
- 阅读文件java参考文本以及android存储参考文本
- 带“.txt”和不带“.txt”的文件名
final List affirmList=copyFilesToList(“assignment_file.txt”);
最终列表suggestList=copyFilesToList(“suggestion_file.txt”);
//copyFilesToList尝试通过selectSuggestion打开文件,如果文件为空或失败,则进入create方法
//打开这两个文件并将它们解压到数组列表中,并将提要转换为解压方法
私有列表复制文件列表(字符串文件名){
字符串行=”;
List arr=new ArrayList();
try(BufferedReader BufferedReader=new BufferedReader(new-InputStreamReader(new-FileInputStream(fileName))){
而((line=bufferedReader.readLine())!=null){
arr.add(行);
}
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE1异常){
e1.printStackTrace();
协议添加(“IO例外”);
}最后{
//密流
}
//测试arr是否包含某些内容
//如果没有,则发送到addDefaultLines
if(arr.isEmpty()){
arr=addDefaultLines(文件名);
}
返回arr;
}
//
私有列表addDefaultLines(字符串文件名){
List arr=new ArrayList();//创建ArrayList
如果(文件名==“assessment_file.txt”){
//将确认值加载到arraylist中
协议补充(“确认1”);
协议补充(“确认2”);
}
如果(文件名==“suggestion_file.txt”){
//将建议值加载到arraylist中
arr.add(“建议1”);
arr.add(“建议2”);
}
//将arraylist与文件同步
试一试{
FileOutputStream fos=openFileOutput(文件名,Context.MODE\u PRIVATE);
字符串列表=”;
int sz=阵列大小();
//为清晰起见,将arraylist放入单个字符串中
对于(int i=0;i
如果您的文件在内部存储器中,您希望使用openFileInput()
方法获取您的FileInputStream
。谢谢!显然,我本可以更仔细地阅读android存储的源文档
final List<String> affirmList = copyFilesToList("affirmation_file.txt");
final List<String> suggestList = copyFilesToList("suggestion_file.txt");
//copyFilesToList tries to open the file via selectSuggestion, if it is empty or fails, it goes into the create method
//opens both files and unpacks them into array list, feeds to unpack mehtods
private List<String> copyFilesToList(String fileName) {
String line="";
List<String> arr = new ArrayList<>();
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)))) {
while ((line = bufferedReader.readLine()) != null) {
arr.add(line);
}
}catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
arr.add("IO exception");
} finally {
//close stream
}
//test if arr contains something
//if not send to addDefaultLines
if (arr.isEmpty()){
arr = addDefaultLines(fileName);
}
return arr;
}
//
private List<String> addDefaultLines(String fileName){
List<String> arr = new ArrayList<String>(); //create arraylist
if (fileName=="affirmation_file.txt") {
//load affirmation values into arraylist
arr.add("affirmation 1");
arr.add("affirmation 2");
}
if (fileName=="suggestion_file.txt"){
//load suggestion values into arraylist
arr.add("suggestion 1");
arr.add("suggestion 2");
}
//sync arraylist with file
try{
FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
String list = "";
int sz=arr.size();
//put the arraylist into a single string, for clarity
for (int i = 0; i < sz; i++) {
list += arr.get(i) + "\n"; //append with line breaks between
}
fos.write(list.getBytes());
}
catch (java.io.IOException e) {
e.printStackTrace();
}
return arr;
}