web-dev-qa-db-ja.com

テキストファイルの書き方Java

次のコードはファイルを生成しません(ファイルがどこにも表示されません)。何が欠けている?

try {
    //create a temporary file
    String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(
        Calendar.getInstance().getTime());
    File logFile=new File(timeLog);

    BufferedWriter writer = new BufferedWriter(new FileWriter(logFile));
    writer.write (string);

    //Close writer
    writer.close();
} catch(Exception e) {
    e.printStackTrace();
}
61
William Falcon

私はあなたの期待と現実は一致しないと思います(しかしいつ彼らはそれをします;)

基本的に、あなたがファイルが書かれていると思う場所とファイルが実際に書かれている場所は等しくありません(hmmm、おそらく私はifステートメントを書くべきです;))

public class TestWriteFile {

    public static void main(String[] args) {
        BufferedWriter writer = null;
        try {
            //create a temporary file
            String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
            File logFile = new File(timeLog);

            // This will output the full path where the file will be written to...
            System.out.println(logFile.getCanonicalPath());

            writer = new BufferedWriter(new FileWriter(logFile));
            writer.write("Hello world!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...
                writer.close();
            } catch (Exception e) {
            }
        }
    }
}

また、この例では既存のファイルが上書きされます。テキストをファイルに追加したい場合は、代わりに次のようにしてください。

writer = new BufferedWriter(new FileWriter(logFile, true));
117
MadProgrammer

私はMadProgrammer's Answerにもう少し加えたいと思います。

複数行書き込みの場合、コマンド実行時

writer.write(string);

改行文字は、デバッグ中に表示された場合や、同じテキストが次のコマンドで端末に表示された場合でも、書き込まれたファイルでは省略またはスキップされます。

System.out.println("\n");

したがって、テキスト全体が1つの大きなテキストのまとまりとなり、ほとんどの場合は望ましくありません。改行文字はプラットフォームに依存する可能性があるので、Javaシステムのプロパティからこの文字を取得することをお勧めします。

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

その後、 "\ n"の代わりに改行変数を使用します。これはあなたが望む方法で出力を得るでしょう。

16
Menezes Sousa

Java 7では今できること

try(BufferedWriter w = ....)
{
  w.write(...);
}
catch(IOException)
{
}

そしてw.closeは自動的に行われます

14
guest

実際にファイルを作成したことはないので、ファイルを作成することはありません。あなたはそれのためにオブジェクトを作りました。インスタンスを作成してもファイルは作成されません。

File newFile = new File("directory", "fileName.txt");

ファイルを作るためにこれをすることができます:

newFile.createNewFile();

あなたはフォルダを作るためにこれをすることができます:

newFile.mkdir();
4
smorce

それは私と一緒に働きます。必ずtimeLogの横に「.txt」を追加してください。私はNetbeansで開かれた単純なプログラムでそれを使いました、そしてそれはメインのフォルダー(ビルダーとsrcフォルダーがあるところ)にプログラムを書きます。

0
Giulio Dalicco

Java 8 LocalDateTimeおよびJava 7 try-withステートメントを使用します。

public class WriteFile {

    public static void main(String[] args) {

        String timeLog = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss").format(LocalDateTime.now());
        File logFile = new File(timeLog);

        try (BufferedWriter bw = new BufferedWriter(new FileWriter(logFile))) 
        {
            System.out.println("File was written to: "  + logFile.getCanonicalPath());
            bw.write("Hello world!");
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}
0
xtra

Javaライブラリを試すことができます。 FileUtils 、ファイルに書き込む関数がたくさんあります。

0
Snow