Java Android应用程序:文件存在时出现FileNotFound错误

Java Android应用程序:文件存在时出现FileNotFound错误,java,android,file,Java,Android,File,在尝试读取内部存储中的文件时,我遇到了filenotfound;我非常确定该文件存在于我期望的位置,并且具有适当的权限 我正在创建一个android应用程序,其中我将一个字符串数组列表保存到应用程序内部存储的文件中,然后尝试随机访问文件中的各个行。我在同一个类中编写文件和读取文件,所以我觉得我不应该有类似文件路径和命名约定的问题 我验证或尝试过的事情: 我已经打开了Android设备监视器和 内容和位置与预期一致 文件权限为-rw rw-- 我抓取了read和write方法中的user.dir

在尝试读取内部存储中的文件时,我遇到了filenotfound;我非常确定该文件存在于我期望的位置,并且具有适当的权限

我正在创建一个android应用程序,其中我将一个字符串数组列表保存到应用程序内部存储的文件中,然后尝试随机访问文件中的各个行。我在同一个类中编写文件和读取文件,所以我觉得我不应该有类似文件路径和命名约定的问题

我验证或尝试过的事情:

  • 我已经打开了Android设备监视器和 内容和位置与预期一致
  • 文件权限为-rw rw--
  • 我抓取了read和write方法中的user.dir,它们都返回“/”似乎不正确,但write方法可以工作(因为文件在那里)
  • 检查了大量示例以仔细检查格式(文件名和方法使用)
  • 阅读文件java参考文本以及android存储参考文本
  • 带“.txt”和不带“.txt”的文件名
我觉得我可能会在这条路上硬编码,但这听起来像是一个糟糕的计划,应该没有必要

无论如何,这里是wonderwall(或者更确切地说是我的代码,但只有看起来相关的代码部分)

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;
}