web-dev-qa-db-ja.com

Javaを使用して文字列をテキストファイルに保存する方法

Javaでは、 "text"という文字列変数のテキストフィールドからのテキストがあります。

"text"変数の内容をファイルに保存するにはどうすればいいですか?

629
Justin White

バイナリデータではなく単にテキストを出力するだけの場合は、次のようになります。

PrintWriter out = new PrintWriter("filename.txt");

次に、出力ストリームと同じように、Stringをそれに書き込みます。

out.println(text);

いつものように、例外処理が必要です。書き終わったら必ずout.close()を呼び出してください。

Java 7以降を使用している場合は、 " try-with-resourcesステートメント "を使用すると、PrintStreamを自動的に閉じます(つまりブロックを終了します)。

try (PrintWriter out = new PrintWriter("filename.txt")) {
    out.println(text);
}

以前と同じようにJava.io.FileNotFoundExceptionを明示的にスローする必要があります。

651
Jeremy Smyth

Apache Commons IO には、これを行うための優れたメソッドがいくつか含まれています。特にFileUtilsには、以下のメソッドが含まれています。

static void writeStringToFile(File file, String data) 

これにより、1回のメソッド呼び出しでテキストをファイルに書き込むことができます。

FileUtils.writeStringToFile(new File("test.txt"), "Hello File");

ファイルのエンコーディングも指定することを検討してください。

224
Jon

Java File API を見てください。

簡単な例:

try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
    out.print(text);
}
83
Jorn

私のプロジェクトでも同様のことをしただけです。 FileWriter を使用すると、作業の一部が簡単になります。そしてここであなたはNice tutorial を見つけることができます。

BufferedWriter writer = null;
try
{
    writer = new BufferedWriter( new FileWriter( yourfilename));
    writer.write( yourstring);

}
catch ( IOException e)
{
}
finally
{
    try
    {
        if ( writer != null)
        writer.close( );
    }
    catch ( IOException e)
    {
    }
}
78
Artem Barger

Java 7ではこれを行うことができます。

String content = "Hello File!";
String path = "C:/a.txt";
Files.write( Paths.get(path), content.getBytes(), StandardOpenOption.CREATE);

ここでより多くの情報があります: http://www.drdobbs.com/jvm/Java-se-7-new-file-io/231600403

64
Daniil Shevelev

Apache Commons IO からFileUtils.writeStringToFile()を使用します。この特定の車輪を再発明する必要はありません。

56
skaffman

以下のコードを変更することで、テキストを処理しているクラスや関数からファイルを作成できます。なぜ世界は新しいテキストエディタを必要としているのでしょうか。

import Java.io.*;

public class Main {

    public static void main(String[] args) {

        try {
            String str = "SomeMoreTextIsHere";
            File newTextFile = new File("C:/thetextfile.txt");

            FileWriter fw = new FileWriter(newTextFile);
            fw.write(str);
            fw.close();

        } catch (IOException iox) {
            //do stuff with exception
            iox.printStackTrace();
        }
    }
}
21
wolfsnipes

Apache Commons IO apiを使用してください。それは簡単です 

としてAPIを使用

 FileUtils.writeStringToFile(new File("FileNameToWrite.txt"), "stringToWrite");

メーベン依存

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>
12

私はこの種の操作のために可能な限りライブラリに頼ることを好みます。これにより、誤って重要な手順を省略する可能性が少なくなります(上記の誤ったwolfsnipesのように)。いくつかのライブラリが上で提案されています、しかしこの種のもののための私のお気に入りは Google Guava です。 Guavaには Files というクラスがあり、この作業に適しています。

// This is where the file goes.
File destination = new File("file.txt");
// This line isn't needed, but is really useful 
// if you're a beginner and don't know where your file is going to end up.
System.out.println(destination.getAbsolutePath());
try {
    Files.write(text, destination, Charset.forName("UTF-8"));
} catch (IOException e) {
    // Useful error handling here
}
11
Spina

1つの文字列に基づいてテキストファイルを作成する必要がある場合

import Java.io.IOException;
import Java.nio.file.Files;
import Java.nio.file.Paths;

public class StringWriteSample {
    public static void main(String[] args) {
        String text = "This is text to be saved in file";

        try {
            Files.write(Paths.get("my-file.txt"), text.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
11
Pavel_H
import Java.io.*;

private void stringToFile( String text, String fileName )
 {
 try
 {
    File file = new File( fileName );

    // if file doesnt exists, then create it 
    if ( ! file.exists( ) )
    {
        file.createNewFile( );
    }

    FileWriter fw = new FileWriter( file.getAbsoluteFile( ) );
    BufferedWriter bw = new BufferedWriter( fw );
    bw.write( text );
    bw.close( );
    //System.out.println("Done writing to " + fileName); //For testing 
 }
 catch( IOException e )
 {
 System.out.println("Error: " + e);
 e.printStackTrace( );
 }
} //End method stringToFile

このメソッドをクラスに挿入することができます。 mainメソッドを持つクラスでこのメソッドを使用している場合は、静的キーWordを追加してこのクラスをstaticに変更します。どちらの方法でも、Java.io. *をインポートする必要があります。そうしないと、File、FileWriter、およびBufferedWriterが認識されません。 

10

あなたはこれをすることができます:

import Java.io.*;
import Java.util.*;

class WriteText
{
    public static void main(String[] args)
    {   
        try {
            String text = "Your sample content to save in a text file.";
            BufferedWriter out = new BufferedWriter(new FileWriter("sample.txt"));
            out.write(text);
            out.close();
        }
        catch (IOException e)
        {
            System.out.println("Exception ");       
        }

        return ;
    }
};
10
Mostafa Rezaei

これを使ってください、とても読みやすいです。

import Java.nio.file.Files;
import Java.nio.file.Paths;

Files.write(Paths.get(path), lines.getBytes(), StandardOpenOption.WRITE);
10
Ran Adler

Java 7を使う:

public static void writeToFile(String text, String targetFilePath) throws IOException
{
    Path targetPath = Paths.get(targetFilePath);
    byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
    Files.write(targetPath, bytes, StandardOpenOption.CREATE);
}
10
BullyWiiPlaza

Org.Apache.commons.io.FileUtilsを使う:

FileUtils.writeStringToFile(new File("log.txt"), "my string", Charset.defaultCharset());
7
i88.ca

1ブロックのテキストをファイルにプッシュすることだけを考えている場合は、そのたびに上書きされます。

JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
    FileOutputStream stream = null;
    PrintStream out = null;
    try {
        File file = chooser.getSelectedFile();
        stream = new FileOutputStream(file); 
        String text = "Your String goes here";
        out = new PrintStream(stream);
        out.print(text);                  //This will overwrite existing contents

    } catch (Exception ex) {
        //do something
    } finally {
        try {
            if(stream!=null) stream.close();
            if(out!=null) out.close();
        } catch (Exception ex) {
            //do something
        }
    }
}

この例では、ユーザーはファイル選択機能を使用してファイルを選択できます。

Java 11 では、Java.nio.file.Filesクラスは、文字列をファイルに書き込むための2つの新しいユーティリティメソッドによって拡張されました(JavaDoc here および here を参照)。最も単純なケースでは、現在はワンライナーです。

Files.writeString(Paths.get("somepath"), "some_string");

オプションのVarargsパラメータを使用すると、既存のファイルへの追加や存在しないファイルの自動作成などの追加オプションを設定できます(JavaDoc here を参照)。

5
Marcel

万が一の事態が発生した場合に備えて、writer/outputstreamをfinallyブロックで閉じることをお勧めします。

finally{
   if(writer != null){
     try{
        writer.flush();
        writer.close();
     }
     catch(IOException ioe){
         ioe.printStackTrace();
     }
   }
}
3
John Doe

最善の方法はFiles.write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options)を使用することだと思います:

String text = "content";
Path path = Paths.get("path", "to", "file");
Files.write(path, Arrays.asList(text));

javadoc を参照してください:

テキスト行をファイルに書き込みます。各行は文字シーケンスであり、システムプロパティline.separatorで定義されているように、プラットフォームの行区切り文字で終了する各行とともにファイルに順番に書き込まれます。文字は、指定された文字セットを使用してバイトにエンコードされます。

Optionsパラメーターは、ファイルを作成または開く方法を指定します。オプションが存在しない場合、このメソッドはCREATE、TRUNCATE_EXISTING、およびWRITEオプションが存在するかのように機能します。つまり、ファイルを書き込み用に開き、存在しない場合はファイルを作成するか、既存の通常ファイルをサイズ0に最初に切り捨てます。このメソッドは、すべての行が書き込まれたときにファイルが閉じられるようにします(またはI/Oエラーまたはその他のランタイム例外がスローされます)。 I/Oエラーが発生した場合、ファイルが作成または切り捨てられた後、またはファイルにいくつかのバイトが書き込まれた後に発生する可能性があります。

ご注意ください。すでにJavaの組み込みFiles.writeで回答している人がいますが、誰も言及していないように思える私の回答で特別なのは、byte[]配列の代わりに、text.getBytes()の代わりにCharSequenceのIterable(つまりString必須ではありません。

0
alb-i986

ArrayListを使用してTextAreaのすべての内容を例示し、saveを呼び出してパラメータとして送信することができます。ライターは文字列の行を作成しただけです。私達はtxtファイルの内容TextAreaになります。意味がわからない場合は、Googleの翻訳者で英語が話せないのが残念です。

Windowsのメモ帳を見てください、それは常に行をジャンプするわけではありません、そして1行にすべてを表示し、ワードパッドOKを使用してください。


プライベートvoid SaveActionPerformed(Java.awt.event.ActionEvent evt){

String NameFile = Name.getText();
ArrayList< String > Text = new ArrayList< String >();

Text.add(TextArea.getText());

SaveFile(NameFile, Text);


public void SaveFile(文字列名、ArrayList <文字列>メッセージ){

path = "C:\\Users\\Paulo Brito\\Desktop\\" + name + ".txt";

File file1 = new File(path);

try {

    if (!file1.exists()) {

        file1.createNewFile();
    }


    File[] files = file1.listFiles();


    FileWriter fw = new FileWriter(file1, true);

    BufferedWriter bw = new BufferedWriter(fw);

    for (int i = 0; i < message.size(); i++) {

        bw.write(message.get(i));
        bw.newLine();
    }

    bw.close();
    fw.close();

    FileReader fr = new FileReader(file1);

    BufferedReader br = new BufferedReader(fr);

    fw = new FileWriter(file1, true);

    bw = new BufferedWriter(fw);

    while (br.ready()) {

        String line = br.readLine();

        System.out.println(line);

        bw.write(line);
        bw.newLine();

    }
    br.close();
    fr.close();

} catch (IOException ex) {
    ex.printStackTrace();
    JOptionPane.showMessageDialog(null, "Error in" + ex);        

}

0
Paulo Brito
private static void generateFile(String stringToWrite, String outputFile) {
try {       
    FileWriter writer = new FileWriter(outputFile);
    writer.append(stringToWrite);
    writer.flush();
    writer.close();
    log.debug("New File is generated ==>"+outputFile);
} catch (Exception exp) {
    log.error("Exception in generateFile ", exp);
}

}

0
Jobin Mathew

私のやり方は、すべてのAndroidバージョンで実行されていること、およびURL/URIなどのリソースを入手する必要があることに起因するストリームに基づいています。

これまでのところ、ストリーム(InputStreamとOutputStream)はバイナリデータを転送します。開発者がストリームに文字列を書き込もうとするときは、まずそれをバイトに変換する、つまりエンコードする必要があります。

public boolean writeStringToFile(File file, String string, Charset charset) {
    if (file == null) return false;
    if (string == null) return false;
    return writeBytesToFile(file, string.getBytes((charset == null) ? DEFAULT_CHARSET:charset));
}

public boolean writeBytesToFile(File file, byte[] data) {
    if (file == null) return false;
    if (data == null) return false;
    FileOutputStream fos;
    BufferedOutputStream bos;
    try {
        fos = new FileOutputStream(file);
        bos = new BufferedOutputStream(fos);
        bos.write(data, 0, data.length);
        bos.flush();
        bos.close();
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
        Logger.e("!!! IOException");
        return false;
    }
    return true;
}
0
牟家宏

キャリッジリターンを文字列からファイルに戻す場合は、次のコード例があります。

    jLabel1 = new JLabel("Enter SQL Statements or SQL Commands:");
    orderButton = new JButton("Execute");
    textArea = new JTextArea();
    ...


    // String captured from JTextArea()
    orderButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            // When Execute button is pressed
            String tempQuery = textArea.getText();
            tempQuery = tempQuery.replaceAll("\n", "\r\n");
            try (PrintStream out = new PrintStream(new FileOutputStream("C:/Temp/tempQuery.sql"))) {
                out.print(tempQuery);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(tempQuery);
        }

    });
0
QA Specialist