【问题标题】:Why is my file not found when using a FileReader in javajava - 为什么在java中使用FileReader时找不到我的文件
【发布时间】:2020-04-16 21:01:39
【问题描述】:

我正在尝试查找我保存在 android studio 中的文件。我已经尝试了一切:放置完整目录,将文件放入该目录的新文件夹中,使用file.getAbsolutePath(),在之前声明文件或将文件直接放入阅读器(BufferedReader r = new BufferedReader(new FileReader("history.txt")); 代码如下:

        File file = new File("Extra Files/history.txt");
        BufferedReader r = new BufferedReader(new FileReader(file.getAbsolutePath()));
        String scores = r.readLine();
        r.close();

无论我尝试什么,它似乎都没有任何其他想法,你能不能在 android studio 中使用这样的文本文件或???

    public void write_score(int ns) throws IOException {
        File file = new File(context.getFilesDir(), "history.txt");
        BufferedWriter w = new BufferedWriter(new FileWriter(file));
        w.append(String.valueOf(ns)).append(",");
        w.close();
    }

【问题讨论】:

  • 如果您想知道某个文件是否存在于某个路径下,请使用 File.exists()。
  • 你有抛出异常吗?如果有,是哪一个?还是 scores-string 只是空的?
  • new File("Extra Files/history.txt") 你使用的是相对路径。 File 类需要一个完整路径。请说出您的完整路径。
  • 使用System.out.println(new File(".").getCanonicalPath().toString());显示java进程的工作目录。你的文件是相对于那个找到的。
  • @itzFlubby 我遇到了 FileNotFoundException 异常

标签: java android file android-studio filereader


【解决方案1】:

如果您只需要从文件中读取,您可以将其放在 assets 或 res/raw 文件夹中,然后使用 context.getAssets().open("filename") or context.getResources().openRawResource(R.raw.resourceName) 读取它们以获取输入流,然后使用 BufferedReader(new InputStreamReader(fileStream)) 获取 reader 。如果没有,this post 应该有答案让您从不同的文件夹中读取。

但是,如果您想写入它,一种方法是使用app-specific internal files,可以使用

File file = new File(context.getFilesDir(), filename);

但是您首先需要使用file.createNewFile() 创建history.txt 文件,并用您想要的任何内容填充它,因为在您第一次尝试访问它时它并不存在。在那之后它应该没问题。我希望这会有所帮助。

编辑:

这是一些读取/写入内部文件的示例代码

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);//Or use Log.d(line);
        }
} catch (IOException e) {
    e.printStackTrace();
}

 public void write_score(int ns) throws IOException {
    File file = new File(context.getFilesDir(), "history.txt");
    BufferedWriter w = new BufferedWriter(new FileWriter(file, true));//true makes it append
    w.write(String.valueOf(ns) + ",");
    w.close();
}

【讨论】:

  • 当您说 res/raw 文件夹时,是 res 或 raw 文件夹还是 res 文件夹中的 raw 文件夹,因为我没有 raw 文件夹。
  • 我的意思是 res 文件夹中的 raw 文件夹。如果你没有,你可以在 android studio 中创建它,或者使用外部文件导航器并通过它创建文件夹(我想我只是使用 windows 资源管理器来创建我的)。
  • 我尝试了第一种方法context.getAssets().open("filename")gut 不起作用,当我尝试第二种方法时它说它必须是一个整数,知道我必须在那里放什么吗?
  • 您需要将 R.raw.name ID 作为输入整数放入,名称可以是不带扩展名的文件名。
  • 所以这行得通,但是当我读到它时,它给了我一个 NullPointerException,很抱歉很痛苦,有什么想法吗?
猜你喜欢
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多