Android:找不到文件异常

时间:2017-04-10 18:44:27

标签: android filenotfoundexception

我正在尝试为我的Android手机编写一个简单的待办事项应用程序。我已经足够了,我想保存我输入的这些字符串。但是,每次我尝试写入数据时,都会得到一个未找到文件的异常。这是我在onCreate方法中用来实例化File的代码。

File path = getFilesDir();
File itemFile = new File(path,"Todo_File.txt");

然后我有两个方法,一个是写入文件,另一个是从中读取。它们看起来像这样:`

public void readItems() {
    try {
        BufferedReader reader = new BufferedReader(new FileReader("Todo_File.txt"));
        while(reader.readLine()!=null){
            items.add(reader.readLine());
        }
    } catch(IOException e) {
        e.printStackTrace();
    }
}

public void writeItems() {
    try{
        BufferedWriter writer = new BufferedWriter(new FileWriter("Todo_File.txt"));
        for(int i=0;i<items.size();i++){
            writer.write(items.get(i));
        }
    } catch (IOException e){
        e.printStackTrace();
    }
}

items是一个stringArray,它保存输入的字符串。每次我尝试编写或读取文件时,我都会遇到以下异常:

W / System.err:java.io.FileNotFoundException:Todo_File.txt(没有这样的文件或目录)

我不明白为什么Android Studio无法找到我创建的文件,有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

在Android中执行File-IO的标准方法是使用与上下文相关的IO方法。

编写文件,请使用以下代码。有关不同文件模式的详细信息可用here

FileOutputStream fOut = openFileOutput("Todo_File.txt", MODE_WORLD_READABLE);

阅读文件,请使用:

FileInputStream fIn = openFileInput("Todo_File.txt");

答案 1 :(得分:1)

您正在寻找一个文件&#34; Todo_File.txt&#34;。

你在哪里保存这个档案? 您是否将其作为资源文件保存在&#34; res / raw&#34;您的应用目录或它位于手机存储中的某个位置?

在这里,您可以了解存储的类型

https://developer.android.com/guide/topics/data/data-storage.html

https://android.stackexchange.com/questions/112951/two-types-of-internal-storage-what-is-the-difference

我猜你很可能需要纠正这个文件的路径。 这是获取&#34; / storage / sdcard0 /&#34;的方法。路径

Environment.getExternalStorageDirectory()

答案 2 :(得分:0)

自定义

File path = getFilesDir();  
File itemFile = new File(path,"Todo_File.txt");

你可以这样做:

public void readItems() {
    try {
        BufferedReader reader = new BufferedReader(new FileReader(itemFile));
        while(reader.readLine()!=null){
            items.add(reader.readLine());
        }
    } catch(IOException e) {
        e.printStackTrace();
    }
}
public void writeItems() {
    try{
        BufferedWriter writer = new BufferedWriter(new FileWriter(itemFile));
        for(int i=0;i<items.size();i++){
            writer.write(items.get(i));
        }
    } catch (IOException e){
        e.printStackTrace();
    }
}

答案 3 :(得分:0)

您需要在写入文件之前实际创建该文件。你应该这样做:

File path = getFilesDir();  
File itemFile = new File(path,"Todo_File.txt");

if (!path.exists()) {
     path.mkdirs();
}

您所做的只是尝试从文件中读取。您收到错误的事实:

W/System.err: java.io.FileNotFoundException: Todo_File.txt (No such file or directory)

表示您尚未创建要写入的文件,并且我没有看到您在任何位置创建该文件。

如果您使用的是模拟器,则需要确保在设备上设置了SDK卡,然后执行以下操作:

File itemFile = new File(Environment.getExternalStorageDirectory(),"Todo_File.txt");

if (!path.exists()) {
     path.mkdirs();
}