次のコードはファイルを生成しません(ファイルがどこにも表示されません)。何が欠けている?
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();
}
私はあなたの期待と現実は一致しないと思います(しかしいつ彼らはそれをします;)
基本的に、あなたがファイルが書かれていると思う場所とファイルが実際に書かれている場所は等しくありません(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));
私はMadProgrammer's Answerにもう少し加えたいと思います。
複数行書き込みの場合、コマンド実行時
writer.write(string);
改行文字は、デバッグ中に表示された場合や、同じテキストが次のコマンドで端末に表示された場合でも、書き込まれたファイルでは省略またはスキップされます。
System.out.println("\n");
したがって、テキスト全体が1つの大きなテキストのまとまりとなり、ほとんどの場合は望ましくありません。改行文字はプラットフォームに依存する可能性があるので、Javaシステムのプロパティからこの文字を取得することをお勧めします。
String newline = System.getProperty("line.separator");
その後、 "\ n"の代わりに改行変数を使用します。これはあなたが望む方法で出力を得るでしょう。
Java 7では今できること
try(BufferedWriter w = ....)
{
w.write(...);
}
catch(IOException)
{
}
そしてw.closeは自動的に行われます
実際にファイルを作成したことはないので、ファイルを作成することはありません。あなたはそれのためにオブジェクトを作りました。インスタンスを作成してもファイルは作成されません。
File newFile = new File("directory", "fileName.txt");
ファイルを作るためにこれをすることができます:
newFile.createNewFile();
あなたはフォルダを作るためにこれをすることができます:
newFile.mkdir();
それは私と一緒に働きます。必ずtimeLogの横に「.txt」を追加してください。私はNetbeansで開かれた単純なプログラムでそれを使いました、そしてそれはメインのフォルダー(ビルダーとsrcフォルダーがあるところ)にプログラムを書きます。
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();
}
}
}
Javaライブラリを試すことができます。 FileUtils 、ファイルに書き込む関数がたくさんあります。