В Java у меня есть текст из текстового поля в переменной String с именем "text".
Как я могу сохранить содержимое переменной "text" в файл?
Если вы'вэ просто выводить текст, а не двоичные данные, следующее будет работать:
PrintWriter out = new PrintWriter("filename.txt");
Затем, напишите ваши строки, как и в любой выходной поток:
out.println(text);
Вы'll необходимо, обработку исключений, как никогда. Будьте уверены, чтобы позвонить оттуда.закрыть ()`, когда вы'вэ закончил писать.
Если вы используете Java 7 или более поздней версии, вы можете использовать и" <а href="https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html">try-with-ресурсов заявление</а>" в который автоматически закроет ваш PrintStream, когда вы сделали с ним (т. е. выхода из блока) примерно так:
try (PrintWriter out = new PrintWriter("filename.txt")) {
out.println(text);
}
Вам все равно нужно явно бросать Ява.Ио.Исключение filenotfoundexception
как раньше.
Апач Викискладе ИО содержит некоторые большие методы для этого, в частности, пакета fileutils содержит следующий метод:
static void writeStringToFile(File file, String data)
который позволяет писать текст в файл одним вызовом метода:
FileUtils.writeStringToFile(new File("test.txt"), "Hello File");
Вы, возможно, захотите указать кодировку для файла, а также.
Посмотрите на Java File API.
быстрый пример:
try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
out.print(text);
}
Только что сделал нечто подобное в своем проекте. Использование 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)
{
}
}
В 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
Используйте FileUtils.writeStringToFile()
из Apache 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();
}
}
}
В Ява 11 в `Ява.НИО.файл.Файлы класса
был продлен на два новых метода утилита для записи строки в файл. Первый способ (см. 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.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();
}
}
}
Использовать Apache Commons на Ио API-интерфейс. Его простой
Использовать API как
FileUtils.writeStringToFile(new File("FileNameToWrite.txt"), "stringToWrite");
Зависимостей Maven
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
Я предпочитаю полагаться на библиотеки, когда это возможно для такого рода операции. Это делает меня менее вероятно, чтобы случайно не пропустить важный шаг (как wolfsnipes ошибка выше). Некоторые библиотеки предлагают выше, но мое любимое для такого рода вещей является компания Google гуава. Гуава имеет класс файлы, который работает хорошо для этой задачи:
// 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
}
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, изменить данный класс к статическим путем добавления статического ключевое слово. В любом случае вам нужно импортировать Java.Ио.* чтобы заставить его работать иначе файл, записывает и BufferedWriter не будут признаны.
Используя Ява 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);
}
Вы могли бы сделать это:
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 ;
}
};
Используя орг."Апач".общин.Ио.Пакета 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
}
}
}
Этот пример позволяет пользователю выбрать файл с помощью селектора файла.
Это's лучше, чтобы закрывать писатель/перенаправляет в блоке 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);
}
}
Я думаю, что лучший способ-использовать файлы.записать(путь, метод<? распространяется объект CharSequence> линии, OpenOption... варианты)`:
String text = "content";
Path path = Paths.get("path", "to", "file");
Files.write(path, Arrays.asList(text));
См javadoc:
писать строки текста в файл. Каждая строка представляет собой последовательность символов и является записывается в файл в последовательности с каждой линии прекращено платформы's линии сепаратора, как определено системное свойство По линии.сепаратор. Символы кодируются в байты, используя указанный набор символов.
параметр Options определяет, как файл создан или открыт. если нет опции присутствуют, то этот метод работает, если создать, TRUNCATE_EXISTING, и варианты записи присутствуют. Другими словами, это открывает файл для записи, создать файл, если он не'т существуют, или изначально усек существующим регулярным-файл размером от 0. В метод гарантирует, что файл будет закрыт, когда все линии были письменные (или ошибка ввода-вывода или другое исключение на этапе выполнения бросается). Если ошибка ввода-вывода происходит, то он может сделать это после того, как файл был создан или Усе, или после некоторых байтов в файл.
Пожалуйста, обратите внимание. Я вижу, что люди уже ответили С Java'с встроенным файлов.писать, но то, что's специальные в мой ответ, который никто, кажется, упомянуть, является перегруженная версия метода, которая принимает итератор на объект CharSequence (т. е. строку), вместо байт[]
такие, что `текст.метод getbytes () не требуется, что немного чище, я думаю.