1

Sams Teach Yourself Java in 24 Hours Sixth Edition by Rogers Cadenhead Chapter 20ConfigWriter.javaエラー

私は Java の初心者です。この記事のタイトルに記載されている Java の本を読んでいます。これがうまくいかないことに私は非常に困惑しています。このコードは、というファイルを作成し、program.propertiesその中に 10 行目から 12 行目のテキストを入れることになっています。

import java.io.*;

class ConfigWriter {
String newline = System.getProperty("line.separator");

ConfigWriter() {
    try {
        File file = new File("program.properties");
        FileOutputStream fileStream = new FileOutputStream(file);
        write(fileStream, "username=max");
        write(fileStream, "score=12550");
        write(fileStream, "level=5");
    } catch (IOException ioe) {
        System.out.println("Could not write file");
    }
}

void write(FileOutputStream stream, String output)
    throws IOException {

    output = output + newline;
    byte[] data = output.getBytes();
    stream.write(data, 0, data.length);
}

public static void main(String[] arguments) {
    ConfigWriter cw = new ConfigWriter();
}

}

代わりに、それはまったく何もしません。完全に空白です。このエラーについて何か助けていただければ幸いです。

4

2 に答える 2

1

コードにエラーや例外はありません。スニペットは実際にファイルを作成しました。テストパスを指定して、src をテストしてみてください。

File file = new File("C:\\Test\\test.txt");

上記の変更により、ファイルが正しく作成されました。そして、前述のように、あなたも使用fileStream.flush();できます。

于 2013-01-22T02:44:29.527 に答える
0

最も可能性の高い問題は、ファイルがどこに書き込まれるかについて混乱していることです。

相対パス名 (「program.properties」など) を使用してファイルに書き込む場合、Java はアプリケーションの「現在のディレクトリ」でファイルを開く/作成しようとします。

  • コマンドプロンプト/シェルからコードを直接実行すると、現在のディレクトリは、プログラムを実行した時点でのシェルの現在のディレクトリになります。

  • ラッパー スクリプトを使用して起動すると、スクリプトはプログラムを起動する前に現在のディレクトリを変更する可能性があります。

  • IDE から起動すると、IDE が現在のディレクトリを決定します。

  • 等々。

この問題を回避するには、絶対パス名を使用してください。

また、そのファイルが実際に書き込まれた場所を特定することも有益です。Windows では、検索ツールを使用してみることができます。Linux では、このfindコマンドが適切な選択です。例えば

  $ sudo find / -name properties.properties | less

...そして待ってください。


この特定の例では、フラッシュとクローズは必要ないことに注意してください。FileOutputStreamバッファリングされていないを使用しています。ただし、それを行うには、コードを次のようにする必要があります。

File file = new File("program.properties");
try (FileOutputStream fileStream = new FileOutputStream(file)) {
    write(fileStream, "username=max");
    write(fileStream, "score=12550");
    write(fileStream, "level=5");
    fileStream.flush();
} catch (IOException ioe) {
    System.out.println("Could not write file");
}

fileStreamの後に「リソース」として宣言したため、 は暗黙的に閉じられていることに注意してください。try

于 2013-01-22T03:10:24.880 に答える