Javaでは、「テキスト」という文字列変数にテキストフィールドのテキストがあります。
「テキスト」変数の内容をファイルに保存するにはどうすればよいですか?
Javaでは、「テキスト」という文字列変数にテキストフィールドのテキストがあります。
「テキスト」変数の内容をファイルに保存するにはどうすればよいですか?
回答:
バイナリデータではなく、単にテキストを出力する場合は、以下が機能します。
PrintWriter out = new PrintWriter("filename.txt");
次に、出力ストリームと同じように、文字列を書き込みます。
out.println(text);
これまで通り、例外処理が必要になります。必ず電話してくださいout.close()
書き終わったらしてください。
Java 7以降を使用している場合は、「try-with-resourcesステートメント」を使用できます。これにより、次のように、処理PrintStream
が完了すると自動的に閉じます(つまり、ブロックを終了します)。
try (PrintWriter out = new PrintWriter("filename.txt")) {
out.println(text);
}
それでもjava.io.FileNotFoundException
、以前のように明示的にをスローする必要があります。
Apache Commons IOには、これを行うためのいくつかの優れたメソッドが含まれています。特に、FileUtilsには次のメソッドが含まれています。
static void writeStringToFile(File file, String data)
これにより、1回のメソッド呼び出しでファイルにテキストを書き込むことができます。
FileUtils.writeStringToFile(new File("test.txt"), "Hello File");
また、ファイルのエンコーディングを指定することも検討してください。
FileUtils.writeStringToFile(new File("test.txt"), "Hello File", forName("UTF-8"));
Java File APIを見てください。
簡単な例:
try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
out.print(text);
}
@Cleanup new FileOutputStream(...)
すれば完了です。
Java 7ではこれを行うことができます:
String content = "Hello File!";
String path = "C:/a.txt";
Files.write( Paths.get(path), content.getBytes());
詳細はこちら:http : //www.drdobbs.com/jvm/java-se-7-new-file-io/231600403
content.getBytes(StandardCharsets.UTF_8)
エンコーディングを明示的に定義するために使用できます。
私のプロジェクトで同じようなことをしました。FileWriterを使用すると、ジョブの一部が簡略化されます。そして、ここにあなたは素晴らしいチュートリアルを見つけることができます。
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)
{
}
}
.close()
(少なくともJava 7では)スローしないようですが、最後のトライキャッチはおそらく冗長ですか?
throw new RuntimeException(e);
Apache Commons IOFileUtils.writeStringToFile()
から使用します。この特定のホイールを再発明する必要はありません。
以下のコードを変更して、テキストを処理しているクラスまたは関数からファイルを書き込むことができます。しかし、なぜ世界に新しいテキストエディターが必要なのか不思議に思います...
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();
}
}
}
ではJavaの11java.nio.file.Files
クラスはファイルに文字列を記述するために2つの新しいユーティリティメソッドによって拡張されました。最初の方法(ここの JavaDocを参照)は、デフォルトとして文字セットUTF-8を使用します。
Files.writeString(Path.of("my", "path"), "My String");
そして、2番目のメソッド(ここの JavaDocを参照)では、個々の文字セットを指定できます。
Files.writeString(Path.of("my", "path"), "My String", StandardCharset.ISO_8859_1);
どちらのメソッドにも、ファイル処理オプションを設定するためのオプションのVarargsパラメーターがあります(ここの JavaDocを参照)。次の例では、存在しないファイルを作成するか、既存のファイルに文字列を追加します。
Files.writeString(Path.of("my", "path"), "String to append", StandardOpenOption.CREATE, StandardOpenOption.APPEND);
この種の操作では、可能な限りライブラリに依存することを好みます。これにより、重要な手順を誤って省略してしまう可能性が低くなります(上記のウルフスナイプスの間違いなど)。いくつかのライブラリーは上記で提案されていますが、この種のものに対する私のお気に入りは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
}
Charsets.UTF-8
。
Charsets.UTF_8
実は
Files.asCharSink(file, charset).write(text)
Apache Commons IO apiを使用します。それは簡単です
APIを次のように使用する
FileUtils.writeStringToFile(new File("FileNameToWrite.txt"), "stringToWrite");
Mavenの依存関係
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
単一の文字列に基づいてテキストファイルを作成する必要がある場合:
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();
}
}
}
これを使用してください、それは非常に読みやすいです:
import java.nio.file.Files;
import java.nio.file.Paths;
Files.write(Paths.get(path), lines.getBytes(), StandardOpenOption.WRITE);
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メソッドを持つクラスでこのメソッドを使用している場合は、staticキーワードを追加して、このクラスをstaticに変更します。どちらの方法でも、java.io。*をインポートして機能させる必要があります。そうしないと、File、FileWriter、およびBufferedWriterが認識されません。
あなたはこれを行うことができます:
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 ;
}
};
使用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);
}
Files.write(targetPath, bytes);
次に、ファイルを上書きするために使用します。期待どおりに動作します。
org.apache.commons.io.FileUtilsの使用:
FileUtils.writeStringToFile(new File("log.txt"), "my string", Charset.defaultCharset());
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
}
}
}
この例では、ユーザーがファイルチューザーを使用してファイルを選択できるようにします。
何かが起こった場合に備えて、ライター/出力ストリームをfinallyブロックで閉じることをお勧めします
finally{
if(writer != null){
try{
writer.flush();
writer.close();
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
}
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);
}
}
私は最良の方法を使用すると思います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を参照してください。
テキスト行をファイルに書き込みます。各行はcharシーケンスであり、システムプロパティline.separatorで定義されているように、プラットフォームの行区切り文字で終了する各行で順番にファイルに書き込まれます。文字は、指定された文字セットを使用してバイトにエンコードされます。
optionsパラメーターは、ファイルの作成方法またはオープン方法を指定します。オプションが存在しない場合、このメソッドは、CREATE、TRUNCATE_EXISTING、およびWRITEオプションが存在するかのように機能します。つまり、ファイルを書き込み用に開き、存在しない場合はファイルを作成するか、既存の通常ファイルを最初にサイズ0に切り捨てます。このメソッドは、すべての行が書き込まれたときにファイルが確実に閉じられるようにします(または、I / Oエラーまたはその他のランタイム例外がスローされます)。I / Oエラーが発生した場合、ファイルが作成またはトランケートされた後、またはファイルにいくつかのバイトが書き込まれた後に発生することがあります。
ご注意ください。私は人々がすでにJavaの組み込みで答えているのを見ますがFiles.write
、私の答えで特別なのは誰も言及していないようで、byte[]
配列の代わりにCharSequence(つまりString)のIterableを取るメソッドのオーバーロードされたバージョンtext.getBytes()
なので、必要ありません、これは少しすっきりしていると思います。
キャリッジリターン文字を文字列からファイルに保存する場合は、コード例を次に示します。
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);
}
});
私の方法は、すべての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;
}
ArrayListを使用して、例としてTextAreaのすべてのコンテンツを配置し、saveを呼び出してパラメーターとして送信できます。ライターは文字列の行を記述しただけなので、行ごとに「for」行を使用してArrayListを最後に書き込みますtxtファイルのコンテンツTextAreaになります。何か意味がわからない場合は、Googleの翻訳者であり、英語を話せない私には申し訳ありません。
Windowsのメモ帳を見ると、常に行がジャンプするわけではなく、すべて1行で表示されます。ワードパッドを使用してください。
private 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(String name, ArrayList< String> message) {
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);
}
}