无法从文本文件中读取行

5
我有一个类似这样的方法:

    public int getIncrement() {

    String extractFolder = "/mnt/sdcard/MyFolder";
    boolean newFolder = new File(extractFolder).mkdir();
    int counter = 0; 

    try {
        File root = new File(extractFolder); 
        if (root.canWrite()){
            File gpxfile = new File(root, "gpxfile.txt");
            FileWriter gpxwriter = new FileWriter(gpxfile);
            BufferedWriter out = new BufferedWriter(gpxwriter);

            Scanner scanner = new Scanner(new FileInputStream(gpxfile.getAbsolutePath()), "UTF-8");
            Log.i("PATH: ", extractFolder + "/gpxfile.txt");

           while(scanner.hasNextLine()) {
               String inc = scanner.nextLine(); 
               counter = Integer.parseInt(inc);
               Log.i("INSIDE WHILE: ", Integer.toString(counter)); 
           }
            counter++;
            out.write(Integer.toString(counter));
            out.close();
        }
    } catch (IOException e) {
        Log.e("GEN_PCN: ", "Could not write file " + e.getMessage());
    }
    return counter;  
}

我想做的是返回这个文件的内容,并将整数加1。但似乎我不能进入while循环,因为LogCat没有打印出任何东西。是的,我确定路径是正确的。


文件gpxfile.txt已经存在了吗?还是你想在这里创建它? - Mike
我期望一个数字,文件中只包含一个数字,在读取文件内容后,该数字将被递增。 - Tobias Moe Thorstensen
在我尝试执行 while(scanner.hasNextLine()) 之前,该文件确实存在。 - Tobias Moe Thorstensen
1
正如另一位回答者所指出的,它可以由FileWriter创建为空文件。如果你真的想在读取后将递增的数字写入文件中,你应该在关闭读取后再打开写入文件。这可能会让事情更加清晰明了。 - brianestey
只需在提取文件夹的末尾尝试使用反斜杠 /。 - Chintan Raghwani
显示剩余5条评论
3个回答

2

我猜测 FileWriter gpxwriter 的构造函数在创建 Scanner 时已经将文件清空了,因此该文件为空并且 hasNextLine 返回 false。当您想要读取文件时,为什么要打开一个用于写入的文件呢?


首先,我想读取文件的内容。在获取到文件内容后,返回该值。之后,我想要覆盖该内容或将其增加一。 - Tobias Moe Thorstensen
1
为了测试我的理论,使用“append”参数打开文件,即FileWriter gpxwriter = new FileWriter(gpxfile,true);以保持其完整性。 - Erich Kitzmueller

1

从我的了解来看,该文件不存在。尝试添加gpxfile.createNewFile()

更深入地说,创建一个文件实例并不会在文件系统上创建一个文件。

因此,这一行 -> File gpxfile = new File(path, filename);

不足以在SD卡上创建文件。您必须跟随它使用

gpxfile.createNewFile(),引用docs所说:

如果且仅当具有此名称的文件尚不存在时,原子地创建由此抽象路径名命名的新空文件。检查文件是否存在以及如果不存在则创建文件是一个与可能影响文件的所有其他文件系统活动相对于原子的单个操作。


0

好的,我标记了你的文件名

只需在 extractFolder 末尾添加一个反斜杠

                                            v
                                            v
                                            v
String extractFolder = "/mnt/sdcard/MyFolder/";
                                            ^ // <---   HERE
                                            ^
                                            ^

因为 File gpxfile = new File(root, "gpxfile.txt"); 没有像 Log 一样的 反斜杠 /


只需尝试一次以下操作:

while(scanner.hasNextLine()) {
      String inc = scanner.nextLine(); 
      //       //   counter = Integer.parseInt(inc);
      Log.i("INSIDE WHILE: ", inc);
      System.out.println("Next Line ::"+inc);  //  Also check this
}

这没有意义,如果你读了我的帖子,它说我无法访问while循环。 - Tobias Moe Thorstensen
那么问题就在于您的扫描器没有获取到数据。 - Chintan Raghwani
1
他正在尝试读写文件(gpxfile),其中文件名在该文件中指定。 - brianestey
好的,我标记了。现在请查看我在上面最经过编辑的答案;它是关于反斜杠的。 - Chintan Raghwani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接