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

OK、あなたのファイル名をマークします

ENDのextractFolderにバックスラッシュを追加するだけです

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

File gpxfile = new File(root, "gpxfile.txt"); であるためです。バックスラッシュがありません/ログが持っているように


次のことを一度試してみてください:

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 に答える