Путь сохранения файла java

Rukovodstvo

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

Java: сохранить / записать строку в файл

Введение Сохранение строки в файлы с помощью Java может быть выполнено несколькими способами. В этой статье мы покажем некоторые распространенные методы записи строки в файл. Вот список всех классов и методов, которые мы рассмотрим: * Files.writeString () * Files.write () * FileWriter * BufferedWriter * PrintWriter Files.writeString () Начиная с Java 11, класс Files содержит полезный служебный метод Files.writeString (). Есть два варианта этого метода. Самая простая форма требует Путь к файлу

Вступление

Сохранить строку в файлы можно несколькими способами с помощью Java. В этой статье мы покажем некоторые распространенные методы записи строки в файл.

Вот список всех классов и методов, которые мы рассмотрим:

Files.writeString ()

Начиная с Java 11, Files содержит полезный служебный метод Files.writeString() . Есть два варианта этого метода. Самая простая форма требует Path к файлу для записи и текстовое содержимое. Другой вариант также принимает необязательный CharSet :

 Path path = Paths.get("output.txt"); String contents = "Hello"; try < Files.writeString(path, contents, StandardCharsets.UTF_8); >catch (IOException ex) < // Handle exception >

Здесь мало места для гибкости, но он отлично работает, если вам нужно быстро что-то записать в файл.

Читайте также:  Кто создал python язык

Files.write ()

String, как и другие объекты, можно преобразовать в byte[] . Метод Files.write() работает с байтами:

 Path path = Paths.get("output.txt"); String someString = "Hello World"; byte[] bytes = someString.getBytes(); try < Files.write(path, bytes); >catch (IOException ex) < // Handle exception >

Нет необходимости закрывать какие-либо ресурсы, так как мы сами не открывали никаких ресурсов.

FileWriter

FileWriter — один из самых простых способов записать текстовое содержимое в файл. Мы создадим File и передадим его в FileWriter чтобы «связать» их.

Затем мы просто используем FileWriter для записи в него:

 File output = new File("output.txt"); FileWriter writer = new FileWriter(output); writer.write("This text was written with a FileWriter"); writer.flush(); writer.close(); 

После использования писателя важно очистить и закрыть ресурсы. В качестве альтернативы вы можете сделать это с помощью синтаксиса try-with-resources

 try(FileWriter writer = new FileWriter("output.txt")) < writer.write("This text was written with a FileWriter"); >catch(IOException e) < // Handle the exception >

BufferedWriter

BufferedWriter — это объект-оболочка, который используется вокруг объектов типа Writer . Если у нас есть существующий Writer такой как FileWriter , мы можем обернуть его внутри BuffereWriter .

BufferedWriter лучше всего использовать, когда для файла write() В этом случае эти многократные записи временно сохраняются во внутренний буфер и записываются в файл только при наличии достаточного содержимого. Это позволяет избежать необходимости хранить каждый новый фрагмент текста в файле и вместо этого предоставляет соответствующий буфер для временного хранения.

Использование BufferedWriter намного эффективнее, чем FileWriter для множественной записи, но это не помогает с одной записью.

Фактически, использование BufferedWriter для одной записи приведет к ненужным накладным расходам. Для таких простых случаев FileWriter — лучший вариант.

 BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt")); 

BufferedWriter и FileWriter расширяют Writer поэтому у них одинаковые методы:

 try(BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) < writer.write("Written with BufferedWriter); >catch(IOException e) < // Handle the exception >

PrintWriter

PrintWriter позволяет нам форматировать текст перед его записью. Он содержит методы, к которым мы привыкли, такие как printf() , println() и т. Д. Давайте создадим PrintWriter :

 File output = new File("output.txt"); PrintWriter writer = new PrintWriter(output); 

Лучший способ работать с PrintWriter — использовать синтаксис try-with-resources

 try(PrintWriter writer = new PrintWriter(new FileWriter("output.txt"))) < // Write using the PrintWriter instance >catch < // Handle Exception >

Когда у нас есть PrintWriter , давайте рассмотрим некоторые из предоставляемых им методов.

PrintWriter с append ()

PrintWriter , как и StringBuilder предоставляет метод append() который позволяет нам добавлять содержимое в конец существующего файла.

Давайте appent() некоторый текст в пустой writer :

 writer.append("Welcome to my fruit store! From me, you can buy:\n"); writer.append("Apples"); writer.append("\n"); writer.append("Oranges"); writer.append("\n"); writer.append("Bananas"); 

Метод append() возвращает PrintWriter к которому он был вызван. Это позволяет append() и упорядочить их более аккуратно:

 writer.append("Welcome to my fruit store! From me, you can buy:\n"); writer.append("Apples\n").append("Oranges\n").append("Bananas\n"); 

PrintWriter с print ()

PrintWriter содержит методы для форматированной печати. К ним относятся print() , printf() и println() :

 writer.print("Welcome to my fruit store %f", 2.0); writer.printf("From me, you can buy %s and %s.", "apples", "oranges"); 

PrintWriter с записью ()

С помощью write() мы можем записывать в поток много различных типов текстового содержимого. Примеры включают массивы символов, строки и целые числа:

 char[] hello = ; writer.write(hello); writer.write("Welcome to my fruit store\n"); writer.write("From me, you can buy apples and oranges"); 

Метод write() принимает только контент без параметров форматирования, поэтому он похож на print() , но не может форматировать строки.

Чтобы завершить каждый PrintWriter в добавлении, печати или записи, важно очистить и закрыть поток:

Метод flush() «сбрасывает» содержимое в файл, а close() навсегда закрывает поток.

Примечание. Если вы используете try-with-resources , он автоматически очистит и закроет поток.

Заключение

В этой статье мы показали несколько распространенных методов записи строк в файлы. Есть много вариантов, потому что есть много возможных вариантов использования.

Мы рассмотрели Files.writeString() , Files.write() , а также классы FileWriter , BufferedWriter и PrintWriter

Licensed under CC BY-NC-SA 4.0

Источник

Java Swing — пример JFileChooser

JFileChooser это быстрый и простой способ предложить пользователю выбрать файл или место сохранения файла. Ниже приведены несколько простых примеров использования этого класса.

JFileChooser имеет 6 конструкторов:

  • JFileChooser() — пустой конструктор, который указывает на каталог пользователя по умолчанию
  • JFileChooser(String) — использует заданный путь
  • JFileChooser(File) — использует данный файл в качестве пути
  • JFileChooser(FileSystemView) — использует данный FileSystemView
  • JFileChooser(String, FileSystemView) — использует заданный путь и FileSystemView
  • JFileChooser(File, FileSystemView) — использует данный текущий каталог и FileSystemView

Все разные способы вызова JFileChooser конструктор

 // JFileChooser jfc; // String path = "C: Users Public"; // File file = new File ("C: Users Public"); // FileSystemView fsv = FileSystemView.getFileSystemView (); // jfc = new JFileChooser (); // jfc = new JFileChooser (path); // jfc = new JFileChooser (file); // jfc = new JFileChooser (fsv); // jfc = new JFileChooser (path, fsv); // jfc = new JFileChooser (file, fsv); 

Личное предпочтение автора должно принимать во внимание FileSystemView , В приведенных ниже примерах мы используем FileSystemView.getFileSystemView() и указать его в домашний каталог через getHomeDirectory() , Этот процесс приводит к типу файла. Другими словами, мы используем конструктор JFileChooser(File) принимая во внимание FileSystemView ,

1. show * Dialog () — Открыть или сохранить файл

Пример использования JFileChooser чтобы получить абсолютный путь к файлу, который пользователь хочет открыть, или получить местоположение, где пользователь хочет сохранить файл:

 package com.csharpcoderr.jfileChooser; import java.io.File; import javax.swing.JFileChooser; import javax.swing.filechooser.FileSystemView; public class FileChooser1 < public static void main(String[] args) < JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); int returnValue = jfc.showOpenDialog(null); // int returnValue = jfc.showSaveDialog (null); if (returnValue == JFileChooser.APPROVE_OPTION) < File selectedFile = jfc.getSelectedFile(); System.out.println(selectedFile.getAbsolutePath()); >> > 

Обратите внимание, что два метода showOpenDialog() а также showSaveDialog() похожи, что делает разницу в том, как разработчик обрабатывает каждый из них. Для удобства чтения я бы не советовал смешивать два метода.

Когда пользователь переходит в каталог, выбирает файл и нажимает «Открыть».

 C:UsersPublicPicturespollock.she-wolf.jpg 

2. setFileSelectionMode (int) — Выбрать файлы или каталоги

С помощью этого метода мы можем ограничить выбор пользователем только каталогов ( JFileChooser.DIRECTORIES_ONLY ) или только файлы ( JFileChooser.FILES_ONLY ) или файлы и каталоги ( JFileChooser.FILES_AND_DIRECTORIES ). По умолчанию FILES_ONLY , Вот пример, который реализует JFileChooser.DIRECTORIES_ONLY :

 package com.csharpcoderr.jfileChooser; import javax.swing.JFileChooser; import javax.swing.filechooser.FileSystemView; public class FileChooser2 < public static void main(String[] args) < JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); jfc.setDialogTitle("Choose a directory to save your file: "); jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnValue = jfc.showSaveDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) < if (jfc.getSelectedFile().isDirectory()) < System.out.println("You selected the directory: " + jfc.getSelectedFile()); >> > > 

Источник

Работа с файловой системой

Работа с настройками уровня activity и приложения позволяет сохранить небольшие данные отдельных типов (string, int), но для работы с большими массивами данных, такими как графически файлы, файлы мультимедиа и т.д., нам придется обращаться к файловой системе.

ОС Android построена на основе Linux. Этот факт находит свое отражение в работе с файлами. Так, в путях к файлам в качестве разграничителя в Linux использует слеш «/», а не обратный слеш «\» (как в Windows). А все названия файлов и каталогов являются регистрозависимыми, то есть «data» это не то же самое, что и «Data».

Приложение Android сохраняет свои данные в каталоге /data/data// и, как правило, относительно этого каталога будет идти работа.

Для работы с файлами абстрактный класс android.content.Context определяет ряд методов:

  • boolean deleteFile (String name) : удаляет определенный файл
  • String[] fileList () : получает все файлы, которые содержатся в подкаталоге /files в каталоге приложения
  • File getCacheDir() : получает ссылку на подкаталог cache в каталоге приложения
  • File getDir(String dirName, int mode) : получает ссылку на подкаталог в каталоге приложения, если такого подкаталога нет, то он создается
  • File getExternalCacheDir() : получает ссылку на папку /cache внешней файловой системы устройства
  • File getExternalFilesDir(String type) : получает ссылку на каталог /files внешней файловой системы устройства
  • File getFileStreamPath(String filename) : возвращает абсолютный путь к файлу в файловой системе
  • FileInputStream openFileInput(String filename) : открывает файл для чтения
  • FileOutputStream openFileOutput (String name, int mode) : открывает файл для записи

Все файлы, которые создаются и редактируются в приложении, как правило, хранятся в подкаталоге /files в каталоге приложения.

Для непосредственного чтения и записи файлов применяются также стандартные классы Java из пакета java.io.

Итак, применим функционал чтения-записи файлов в приложении. Пусть у нас будет следующая примитивная разметка layout:

Поле EditText предназначено для ввода текста, а TextView — для вывода ранее сохраненного текста. Для сохранения и восстановления текста добавлены две кнопки.

Теперь в коде Activity пропишем обработчики кнопок с сохранением и чтением файла:

package com.example.filesapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class MainActivity extends AppCompatActivity < private final static String FILE_NAME = "content.txt"; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); >// сохранение файла public void saveText(View view) < FileOutputStream fos = null; try < EditText textBox = findViewById(R.id.editor); String text = textBox.getText().toString(); fos = openFileOutput(FILE_NAME, MODE_PRIVATE); fos.write(text.getBytes()); Toast.makeText(this, "Файл сохранен", Toast.LENGTH_SHORT).show(); >catch(IOException ex) < Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); >finally < try< if(fos!=null) fos.close(); >catch(IOException ex) < Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); >> > // открытие файла public void openText(View view) < FileInputStream fin = null; TextView textView = findViewById(R.id.text); try < fin = openFileInput(FILE_NAME); byte[] bytes = new byte[fin.available()]; fin.read(bytes); String text = new String (bytes); textView.setText(text); >catch(IOException ex) < Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); >finally < try< if(fin!=null) fin.close(); >catch(IOException ex) < Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); >> > >

При нажатии на кнопку сохранения будет создаваться поток вывода FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE)

В данном случае введенный текст будет сохраняться в файл «content.txt». При этом будет использоваться режим MODE_PRIVATE

Система позволяет создавать файлы с двумя разными режимами:

  • MODE_PRIVATE : файлы могут быть доступны только владельцу приложения (режим по умолчанию)
  • MODE_APPEND : данные могут быть добавлены в конец файла

Поэтому в данном случае если файл «content.txt» уже существует, то он будет перезаписан. Если же нам надо было дописать файл, тогда надо было бы использовать режим MODE_APPEND:

FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);

Для чтения файла применяется поток ввода FileInputStream :

FileInputStream fin = openFileInput(FILE_NAME);

Подробнее про использование потоков ввода-вывода можно прочитать в руководстве по Java: https://metanit.com/java/tutorial/6.3.php

В итоге после нажатия кнопки сохранения весь текст будет сохранен в файле /data/data/название_пакета/files/content.txt

Сохранение и открытие файлов в Android и Java

Где физически находится созданный файл? Чтобы увидеть его на подключенном устройстве перейдем в Android Stud в меню к пункту View -> Tool Windows -> Device File Explorer

Device File Explorer в Android Studio

После этого откроектся окно Device File Explorer для просмотра файловой системы устройства. И в папке data/data/[название_пакета_приложения]/files мы сможем найти сохраненный файл.

Источник

Оцените статью