0

テキストファイルに配列を書き込むには、次の方法があります。既存のテキストファイルが指定されている場合は正常に機能しますが、存在しないファイルが指定されている場合は、try-catchもコードを実行してメソッドを再起動しません。エラーなどは表示されませんが、catchブロックは実行されません。IOExceptionをキャッチする必要があるとは思いませんでしたが、そうしないとコードは実行されません。そうそう、誰かが私がこれを機能させる方法を知っていますか?

編集:getInputメソッドがユーザーに入力を求めるプロンプトを表示することを忘れました。

private static void openFileWriter(String prompt, boolean append, int wordsperline, String[] story) {
  try {
    try {
      save = new PrintWriter(new FileWriter(getInput(prompt), append));
      wordsperline = 0;
      save.println("");
      save.println("");
      save.println("Story start");
      for (int x = 0; x <= story.length-1; x++) {
        if (story[x] == null) {
        } else {
          if (wordsperline == 21) {
           save.println(story[x]);
           wordsperline = 0;
          } else {
           save.print(story[x]);
           wordsperline++;
          }
        }
      }
      save.close();
    } catch (FileNotFoundException e1) {
    openFileWriter("File not found", append,wordsperline,story);
    } 
  } catch (IOException e) {
    // TODO Auto-generated catch block
    openFileWriter("File not found", append,wordsperline,story);
  }
}
4

3 に答える 3

2

ファイルが存在しない場合、ファイルに書き込むことはできません。catchブロックで、存在しないファイルにエラーを書き込もうとしています。また、ここで必要なのは1つのcatchブロックだけだと思います。また、ifステートメントブロックの1つが空であることに注意してください。

これを試して:

try
{
    save = new PrintWriter(new FileWriter(getInput(prompt), append));
    wordsperline = 0;
    save.println("");
    save.println("");
    save.println("Story start");
    for(int x = 0; x <= story.length-1; x++)
    {
        if (story[x] == null)
        {
        }
        else
        {
           if (wordsperline == 21)
           {
             save.println(story[x]);
             wordsperline = 0;
           }
           else
           {
             save.print(story[x]);
             wordsperline++;
           }
       }
    }
    save.close();
}
catch (FileNotFoundException e1)
{
   System.err.println(e1.getMessage());
}   
catch (IOException e)
{
   System.err.println(e.getMessage());
}
于 2012-06-09T13:45:05.433 に答える
0

このバージョンを試して、例外が発生したときにスタックトレースを送信してください。

public static List<String> splitByLength(String filename, int length) {
    List<String> splitWords = new ArrayList<String>();

    for (int i = 0; i < str.length(); i += length) {
        splitWords
                .add(str.substring(i, Math.min(str.length(), i + length)));
    }
    return splitWords;
}

private static void openFileWriter(String prompt, boolean append,
        int wordsperline, String[] story) {
    PrintWriter save = null;
    try {
        save = new PrintWriter(new FileWriter("c:\\test.txt", append));
        wordsperline = 0;
        save.println("");
        save.println("");
        save.println("Story start");
        for (int x = 0; x <= story.length - 1; x++) {
            if (story[x] != null) {
                List<String> splitWords = splitByLength(story[x], 21);
                for (String line : splitWords) {
                    save.println(line);
                }
            }
        }

    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (save != null) {
            save.close();
        }
    }
}
于 2012-06-09T14:04:53.283 に答える
0

FileWriterjavadocを参照してください。

コンストラクタードキュメントからの引用:

スロー:IOException-指定されたファイルが存在するが、通常のファイルではなくディレクトリである場合、存在しないが作成できない場合、またはその他の理由で開くことができない場合

存在しないが、書き込み権限のある場所にある正当なファイル名であるファイル名を渡すと、ファイルが作成されるだけです。

実際、コードをディレクトリに渡すと、コードはキャッチブロックに到達します(奇妙なことにFileNotFoundException、この状況では、文書化されているのではなく、コードがキャッチされますIOException)。

ファイルが存在するかどうかを確認するには、Filejavadocを参照してください。

于 2012-06-09T14:58:33.627 に答える