В Java у меня есть текст из текстового поля в строковой переменной под названием «текст».
Как я могу сохранить содержимое "текстовой" переменной в файл?
В Java у меня есть текст из текстового поля в строковой переменной под названием «текст».
Как я могу сохранить содержимое "текстовой" переменной в файл?
Если вы просто выводите текст, а не какие-либо двоичные данные, следующее будет работать:
PrintWriter out = new PrintWriter("filename.txt");
Затем напишите в него свою строку, как и в любой выходной поток:
out.println(text);
Как всегда, вам понадобится обработка исключений. Не забудьте позвонить out.close()
, когда закончите писать.
Если вы используете Java 7 или новее, вы можете использовать "попробовать с -resources statement ", который автоматически закроет ваш PrintStream
, когда вы закончите с ним (т.е. выйдете из блока) следующим образом:
try (PrintWriter out = new PrintWriter("filename.txt")) {
out.println(text);
}
Вам все равно нужно будет явно выбросить java.io.FileNotFoundException
, как и раньше.
out.close()
? Он записывает пустой файл, если PrintWriter перед очисткой или закрытием собирает мусор, но если вы close()
правильно, он записывает файл.
- person Jeremy Smyth; 01.08.2013
Apache Commons IO содержит несколько отличных методов для этого, в частности FileUtils содержит следующий метод:
static void writeStringToFile(File file, String data)
который позволяет записывать текст в файл за один вызов метода:
FileUtils.writeStringToFile(new File("test.txt"), "Hello File");
Вы также можете подумать об указании кодировки для файла.
FileUtils.writeStringToFile(new File("test.txt"), "Hello File", forName("UTF-8"));
- person Paul Fournel; 09.11.2017
В 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)
можно использовать для явного определения кодировки.
- person John29; 28.04.2016
Взгляните на API файлов Java
быстрый пример:
try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
out.print(text);
}
@Cleanup new FileOutputStream(...)
, и все готово.
- person Jorn; 04.09.2011
Просто сделал что-то подобное в моем проекте. Использование 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)
{
}
}
write()
.
- person Adrian Pronk; 22.11.2011
.close()
не бросает (по крайней мере, в Java 7?), Возможно, последний trycatch является избыточным?
- person Kos; 14.06.2012
throw new RuntimeException(e);
- person Roger Keays; 11.02.2013
Используйте FileUtils.writeStringToFile()
из Apache Commons IO. Нет необходимости изобретать именно это колесо.
В Java 11 класс java.nio.file.Files
был расширен двумя новыми служебными методами для записи строки в файл. Первый метод (см. JavaDoc здесь) использует кодировку UTF-8 по умолчанию:
Files.writeString(Path.of("my", "path"), "My String");
И второй метод (см. 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);
Вы можете использовать приведенный ниже код изменения, чтобы записать файл из любого класса или функции, обрабатывающей текст. Однако возникает вопрос, зачем миру нужен новый текстовый редактор ...
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();
}
}
}
Я предпочитаю по возможности полагаться на библиотеки для такого рода операций. Это снижает вероятность того, что я случайно пропущу важный шаг (например, волкодав, сделанный выше). Некоторые библиотеки предложены выше, но мне больше всего нравится 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
.
- person florian; 30.10.2015
Charsets.UTF_8
- person Tim Büthe; 29.03.2016
Files.asCharSink(file, charset).write(text)
- person Vadzim; 07.04.2020
Используйте 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.nio.file.Files;
import java.nio.file.Paths;
Files.write(Paths.get(path), lines.getBytes(), StandardOpenOption.WRITE);
Использование 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);
, чтобы перезаписать файл. Это будет работать как положено.
- person BullyWiiPlaza; 10.03.2018
Если вам нужно создать текстовый файл на основе одной строки:
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.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
Вы можете вставить этот метод в свои классы. Если вы используете этот метод в классе с основным методом, измените этот класс на статический, добавив ключевое слово 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 ;
}
};
Использование org.apache.commons.io.FileUtils:
FileUtils.writeStringToFile(new File("log.txt"), "my string", Charset.defaultCharset());
Если вы хотите поместить в файл только один блок текста, он будет каждый раз перезаписывать его.
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();
}
}
}
В основном тот же ответ как здесь, но его легко скопировать / вставить, и он просто работает ;-)
import java.io.FileWriter;
public void saveToFile(String data, String filename) {
try (
FileWriter fw = new FileWriter(filename)) {
fw.write(data);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Я думаю, что лучше всего использовать 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. Этот метод гарантирует, что файл будет закрыт, когда все строки будут записаны ( или возникает ошибка ввода-вывода или другое исключение времени выполнения). Если возникает ошибка ввода-вывода, это может происходить после того, как файл был создан или усечен, или после того, как в файл были записаны некоторые байты.
Пожалуйста, обрати внимание. Я вижу, что люди уже ответили встроенным в Java Files.write
, но что особенного в моем ответе, о котором, кажется, никто не упоминает, - это перегруженная версия метода, который принимает Iterable of CharSequence (т.е. String) вместо массива byte[]
, таким образом 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, например, и отправить как параметр, вызвав сохранение, поскольку писатель просто написал строковые строки, затем мы используем «for» построчно для записи нашего ArrayList в конце мы будем содержимое TextArea в txt файле. Если что-то не имеет смысла, извините, это переводчик Google, а я не говорю по-английски.
Посмотрите на Блокнот Windows, он не всегда перескакивает по строкам и показывает все в одну строку, используйте Wordpad нормально.
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);
}
}