4

我有这样的方法:

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

我想要完成的是返回这个文件的内容,并将integer1 递增。但似乎我无法进入while循环,因为LogCat没有打印出任何内容。是的,确定路径是正确的。

4

3 回答 3

2

我猜 的构造函数在创建时 FileWriter gpxwriter已经将文件Scanner清空,因此文件为空并hasNextLine返回false. 为什么要读取文件时要打开文件进行写入?

于 2012-08-01T14:14:16.220 回答
1

据我所知,该文件不存在。尝试添加 gpxfile.createNewFile()

为了更深入地了解,创建 File 实例不会在文件系统上创建文件。

所以,这一行 -> File gpxfile = new File(path, filename);

不足以在 sd 卡上创建文件。你必须跟随它

引用文档的 gpxfile.createNewFile()说:

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

于 2012-08-01T14:13:39.463 回答
0

好的,我标记你的文件名

只需在 END的 extractFolder中添加一个BACKSLASH

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

因为File gpxfile = new File(root, "gpxfile.txt"); 没有BackSlash /作为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
}
于 2012-08-01T14:07:42.440 回答