У Java у мене є текст із текстового поля в змінній String під назвою "текст".
Як я можу зберегти вміст змінної "text" у файлі?
У Java у мене є текст із текстового поля в змінній String під назвою "текст".
Як я можу зберегти вміст змінної "text" у файлі?
Відповіді:
Якщо ви просто виводите текст, а не будь-які двійкові дані, буде працювати наступне:
PrintWriter out = new PrintWriter("filename.txt");
Потім напишіть до нього свою String так само, як і в будь-який вихідний потік:
out.println(text);
Вам, як ніколи, знадобиться обробка виключень Обов’язково телефонуйтеout.close()
коли закінчите писати.
Якщо ви використовуєте Java 7 або новішу версію, ви можете скористатись оператором " пробний ресурс ", який автоматично закриє ваш, PrintStream
коли ви закінчите з ним (тобто вийдете з блоку) так:
try (PrintWriter out = new PrintWriter("filename.txt")) {
out.println(text);
}
Вам все одно потрібно буде явно кинути java.io.FileNotFoundException
як раніше.
AOche 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"));
Погляньте на API файлу Java
короткий приклад:
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);
Використання FileUtils.writeStringToFile()
з AOche Commons IO . Не потрібно винаходити саме це колесо.
Ви можете використовувати модифікований код нижче, щоб написати свій файл із будь-якого класу чи функції, що обробляє текст. Хоча хтось цікавиться, чому світу потрібен новий текстовий редактор ...
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
клас був продовжений на два нових службових методів , щоб записати рядок в файл. Перший метод (див. Тут 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);
Я вважаю за краще покладатися на бібліотеки, коли це можливо для такого роду операцій. Це робить мене менш ймовірним випадково пропустити важливий крок (як помилка вовчих черепів, зроблених вище). Деякі бібліотеки пропонуються вище, але мій фаворит для подібних речей - 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)
Використовуйте AOche 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
Ви можете вставити цей метод у свої класи. Якщо ви використовуєте цей метод у класі з основним методом, змініть цей клас на статичний, додавши статичне ключове слово. У будь-якому випадку вам потрібно буде імпортувати java.io. *, щоб він працював інакше. Файл, 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());
Якщо ви хочете лише натиснути на файл один блок тексту, це буде перезаписано щоразу.
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{
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 :
Запишіть рядки тексту у файл. Кожен рядок є послідовною символом і записується у файл послідовно з кожним рядком, що закінчується роздільником рядків платформи, як визначено властивістю системи line.separator. Символи кодуються в байти за допомогою вказаної таблиці.
Параметр параметра вказує, як файл створюється або відкривається. Якщо жодних параметрів немає, то цей метод працює так, ніби параметри CREATE, TRUNCATE_EXISTING та WRITE. Іншими словами, він відкриває файл для запису, створюючи файл, якщо його не існує, або спочатку прив'язує існуючий звичайний файл до розміру 0. Метод забезпечує закриття файлу, коли всі рядки записані ( або викидається помилка вводу / виводу або інший виняток виконання). Якщо виникає помилка вводу-виводу, то це може бути зроблено після створення або обрізання файлу, або після того, як у файл будуть записані деякі байти.
Будь ласка, запиши. Я бачу, що люди вже відповіли за допомогою вбудованої Java Files.write
, але особливістю у моїй відповіді, яку, схоже, ніхто не згадує, є перевантажена версія методу, яка замість byte[]
масиву приймає Iterable CharSequence (тобто String) , тому 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 для зразка, і надіслати як параметр, викликаючи збереження, оскільки автор просто написав рядкові рядки, тоді ми використовуємо "за" рядок за рядком, щоб написати наш 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);
}
}