ファイルを作成してJavaで書き込むにはどうすればよいですか?

2010年05月22日に質問されました。  ·  閲覧回数 2.9M回  ·  ソース

Drew Johnson picture
2010年05月22日

Javaで(テキスト)ファイルを作成して書き込む最も簡単な方法は何ですか?

回答

Michael picture
2010年05月22日
1769

以下の各コードサンプルはIOExceptionスローする可能性があることに注意してください。 例外処理については、このチュートリアルを参照してください。

以下の各コードサンプルは、ファイルがすでに存在する場合、ファイルを上書きすることに注意してください

テキストファイルの作成:

PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();

バイナリファイルの作成:

byte data[] = ...
FileOutputStream out = new FileOutputStream("the-file-name");
out.write(data);
out.close();

Java 7以降のユーザーは、 Filesクラスを使用してファイルに書き込むことができます。

テキストファイルの作成:

List<String> lines = Arrays.asList("The first line", "The second line");
Path file = Paths.get("the-file-name.txt");
Files.write(file, lines, StandardCharsets.UTF_8);
//Files.write(file, lines, StandardCharsets.UTF_8, StandardOpenOption.APPEND);

バイナリファイルの作成:

byte data[] = ...
Path file = Paths.get("the-file-name");
Files.write(file, data);
//Files.write(file, data, StandardOpenOption.APPEND);
Bozho picture
2010年05月22日
420

Java 7以降の場合:

try (Writer writer = new BufferedWriter(new OutputStreamWriter(
              new FileOutputStream("filename.txt"), "utf-8"))) {
   writer.write("something");
}

ただし、そのための便利なユーティリティがあります。

FileWriter使用するできます使用する

以下は、Java7より前の元の回答です。


Writer writer = null;

try {
    writer = new BufferedWriter(new OutputStreamWriter(
          new FileOutputStream("filename.txt"), "utf-8"));
    writer.write("Something");
} catch (IOException ex) {
    // Report
} finally {
   try {writer.close();} catch (Exception ex) {/*ignore*/}
}

参照:ファイルの読み取り、書き込み、および作成(NIO2を含む)。

icza picture
2014年04月22日
132

ファイルに書き込みたいコンテンツがすでにある場合(オンザフライで生成されていない場合)、ネイティブI / Oの一部としてJava7にjava.nio.file.Files追加すると、最も簡単で効率的な方法で目標。

基本的に、ファイルの作成と書き込みは1行だけで、さらに1つの簡単なメソッド呼び出しです。

次の例では、6つの異なるファイルを作成して書き込み、その使用方法を示しています。

Charset utf8 = StandardCharsets.UTF_8;
List<String> lines = Arrays.asList("1st line", "2nd line");
byte[] data = {1, 2, 3, 4, 5};

try {
    Files.write(Paths.get("file1.bin"), data);
    Files.write(Paths.get("file2.bin"), data,
            StandardOpenOption.CREATE, StandardOpenOption.APPEND);
    Files.write(Paths.get("file3.txt"), "content".getBytes());
    Files.write(Paths.get("file4.txt"), "content".getBytes(utf8));
    Files.write(Paths.get("file5.txt"), lines, utf8);
    Files.write(Paths.get("file6.txt"), lines, utf8,
            StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
    e.printStackTrace();
}
Eric Petroelje picture
2010年05月22日
78
public class Program {
    public static void main(String[] args) {
        String text = "Hello world";
        BufferedWriter output = null;
        try {
            File file = new File("example.txt");
            output = new BufferedWriter(new FileWriter(file));
            output.write(text);
        } catch ( IOException e ) {
            e.printStackTrace();
        } finally {
          if ( output != null ) {
            output.close();
          }
        }
    }
}
Draeven picture
2013年04月10日
43

これは、ファイルを作成または上書きするための小さなサンプルプログラムです。 ロングバージョンなのでわかりやすくなっています。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class writer {
    public void writing() {
        try {
            //Whatever the file path is.
            File statText = new File("E:/Java/Reference/bin/images/statsTest.txt");
            FileOutputStream is = new FileOutputStream(statText);
            OutputStreamWriter osw = new OutputStreamWriter(is);    
            Writer w = new BufferedWriter(osw);
            w.write("POTATO!!!");
            w.close();
        } catch (IOException e) {
            System.err.println("Problem writing to the file statsTest.txt");
        }
    }

    public static void main(String[]args) {
        writer write = new writer();
        write.writing();
    }
}
Anuj Dhiman picture
2015年11月20日
41

Javaでファイルを作成して書き込む非常に簡単な方法:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class CreateFiles {

    public static void main(String[] args) {
        try{
            // Create new file
            String content = "This is the content to write into create file";
            String path="D:\\a\\hi.txt";
            File file = new File(path);

            // If file doesn't exists, then create it
            if (!file.exists()) {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);

            // Write in file
            bw.write(content);

            // Close connection
            bw.close();
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}
icl7126 picture
2013年04月19日
36

使用する:

try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8))) {
    writer.write("text to write");
} 
catch (IOException ex) {
    // Handle me
}  

try()すると、ストリームが自動的に閉じられます。 このバージョンは短く、高速(バッファリング)で、エンコーディングを選択できます。

この機能はJava7で導入されました。

iKing picture
2014年06月10日
21

ここでは、テキストファイルに文字列を入力しています。

String content = "This is the content to write into a file";
File file = new File("filename.txt");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close(); // Be sure to close BufferedWriter

新しいファイルを簡単に作成して、そのファイルにコンテンツを追加できます。

afk5min picture
2015年05月13日
18

著者は、(SunとIBMの両方によって)EoLされたJavaバージョンのソリューションが必要かどうかを指定しなかったため、これらは技術的に最も普及しているJVMであり、ほとんどの人が回答したようです。テキスト(非バイナリ)ファイルであると指定される前の著者の質問に対して、私は答えを提供することにしました。


まず、Java 6は一般的にサポートが終了しました。作成者はレガシー互換性が必要であると指定しなかったため、自動的にJava 7以降を意味すると思います(Java 7はまだIBMによってEoLされていません)。 したがって、ファイルI / Oチュートリアルを直接見ることができます: https

Java SE 7リリース以前は、java.io.FileクラスはファイルI / Oに使用されるメカニズムでしたが、いくつかの欠点がありました。

  • 多くのメソッドは失敗しても例外をスローしなかったため、有用なエラーメッセージを取得できませんでした。 たとえば、ファイルの削除が失敗した場合、プログラムは「削除の失敗」を受け取りますが、ファイルが存在しなかったのか、ユーザーに権限がなかったのか、その他の問題があったのかはわかりません。
  • 名前の変更方法は、プラットフォーム間で一貫して機能しませんでした。
  • シンボリックリンクの実際のサポートはありませんでした。
  • ファイルのアクセス許可、ファイルの所有者、その他のセキュリティ属性など、メタデータのサポートがさらに必要でした。 ファイルメタデータへのアクセスは非効率的でした。
  • Fileメソッドの多くはスケーリングしませんでした。 サーバーを介して大きなディレクトリリストを要求すると、ハングする可能性があります。 ディレクトリが大きいと、メモリリソースの問題が発生し、サービス拒否攻撃が発生する可能性もあります。
  • 循環シンボリックリンクがある場合、ファイルツリーを再帰的にウォークし、適切に応答できる信頼性の高いコードを作成することはできませんでした。

まあ、それはjava.io.Fileを除外します。 ファイルの書き込み/追加ができない場合は、その理由すらわからない場合があります。


引き続きチュートリアルを見ることができます//docs.oracle.com/javase/tutorial/essential/io/file.html#common

事前https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#です

次に例を示します(簡略化)。

Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, StandardCharsets.UTF_8);

別の例(追加):

Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE);

移動しながらファイルコンテンツを書き込みたい場合https

簡略化された例(Java 8以降):

Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file)) {
    writer.append("Zero header: ").append('0').write("\r\n");
    [...]
}

別の例(追加):

Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE)) {
    writer.write("----------");
    [...]
}

これらの方法は、作成者側の労力を最小限に抑え、[テキスト]ファイルに書き込むときに他のすべての方法よりも優先する必要があります。

extraneon picture
2010年05月22日
16

比較的痛みのない体験をしたい場合は、 Apache Commons IOパッケージ、より具体的にはFileUtilsクラスもご覧ください。

サードパーティのライブラリを確認することを忘れないでください。 Joda-日付操作のApache Commons Lang StringUtilsなどにより、コードが読みやすくなります。

Javaは優れた言語ですが、標準ライブラリは少し低レベルの場合があります。 強力ですが、それでも低レベルです。