Как записать массив в файл java
Всем привет!
Ребята, не могу понять где ошибка. Пытаюсь записать массив в файл.
метод записи вот
public void WriteFile() throws IOException < CreateArray(); try (FileWriter filewriter = new FileWriter("Test.txt")) < for (int i=0;i<3;++i) for (int j=0;j<3;++j) filewriter.write(massiv[i][j]); filewriter.flush(); >>
На всякий случай привожу весь код
package test; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; /** * * @author Ноут */ public class Test < private int[][] massiv; File file = new File("Test.txt"); public Test() throws IOException < file.createNewFile(); massiv = new int[3][3]; CreateArray(); >private void CreateArray() < for (int i=0;i<3;++i) for (int j=0;j<3;++j) massiv[i][j] = 1; >public void WriteFile() throws IOException < CreateArray(); try (FileWriter filewriter = new FileWriter("Test.txt")) < for (int i=0;i<3;++i) for (int j=0;j<3;++j) filewriter.write(massiv[i][j]); filewriter.flush(); >> public void ReadFile() throws FileNotFoundException, IOException < Scanner scannerfile = new Scanner(file); for(int i=0;i<3;++i) < for (int j=0;j<3;++j) < if(scannerfile.hasNextInt()) massiv[i][j]=scannerfile.nextInt(); >> System.out.print("Введенный массив\n"); for(int i=0;i <3;++i) < for (int j=0;j<3;++j) < System.out.print(massiv[i][j] + " "); >System.out.print("\n"); > > public static void main(String[] args) throws IOException < Test test = new Test(); test.WriteFile(); >>
Заранее спасибо!
Желание тысяча возможностей, нежелание — тысяча причин
| Стремящийся |
| Посмотреть профиль |
| Найти ещё сообщения от Стремящийся |
Запись byte[] в файл на Java
В этом кратком руководстве мы изучим несколько различных способов записи массива байтов Java в файл. Мы начнем с самого начала, используя пакет Java IO. Далее мы рассмотрим пример с использованием Java NIO. После этого мы будем использовать Google Guava и Apache Commons IO.
2. Java ввод/вывод
Пакет Java IO существует со времен JDK 1.0 и предоставляет набор классов и интерфейсов для чтения и записи данных.
Давайте используем FileOutputStream для записи изображения в файл:
File outputFile = tempFolder.newFile("outputFile.jpg"); try (FileOutputStream outputStream = new FileOutputStream(outputFile)) outputStream.write(dataForWriting); >
Мы открываем выходной поток в наш целевой файл, а затем мы можем просто передать наш byte[] dataForWriting в метод записи . Обратите внимание, что здесь мы используем блок try -with-resources , чтобы убедиться, что мы закрываем OutputStream в случае возникновения исключения IOException .
3. Java НИО
Пакет Java NIO был представлен в Java 1.4, а API файловой системы для NIO был представлен как расширение в Java 7. Java NIO использует буферизацию и не блокирует, тогда как Java IO использует блокирующие потоки. Синтаксис создания файловых ресурсов более краток в пакете java.nio.file .
Мы можем написать наш byte[] в одну строку, используя класс Files :
Files.write(outputFile.toPath(), dataForWriting);
В нашем примере либо создается файл, либо усекается существующий файл и открывается для записи. Мы также можем использовать Paths.get(«путь/к/файлу») или Paths.get(«путь», «к», «файл») для создания пути , который описывает, где будет храниться наш файл. Путь — это собственный способ выражения путей в Java NIO.
Если нам нужно переопределить поведение при открытии файла, мы также можем предоставить OpenOption методу записи .
4. Google Гуава
Guava — это библиотека от Google, которая предоставляет множество типов для выполнения общих операций в Java, включая ввод-вывод.
Давайте импортируем Guava в наш файл pom.xml :
dependency> groupId>com.google.guavagroupId> artifactId>guavaartifactId> version>31.0.1-jreversion> dependency>
4.1. Файлы гуавы
Как и в случае с пакетом Java NIO, мы можем записать наш byte[] в одну строку:
Files.write(dataForWriting, outputFile);
Метод Guava Files.write также принимает необязательный OptionOptions и использует те же значения по умолчанию, что и java.nio.Files.write .
Однако здесь есть одна загвоздка: метод Guava Files.write помечен аннотацией @Beta . Согласно документации , это означает, что он может измениться в любое время, поэтому его не рекомендуется использовать в библиотеках.
Итак, если мы пишем проект библиотеки, мы должны рассмотреть возможность использования ByteSink .
4.2. БайтСинк
Мы также можем создать ByteSink для записи нашего byte[] :
ByteSink byteSink = Files.asByteSink(outputFile); byteSink.write(dataForWriting);
ByteSink — это место назначения, в которое мы можем записывать байты. Он поставляет OutputStream в пункт назначения.
Если нам нужно использовать java.nio.files.Path или предоставить специальный OpenOption , мы можем получить наш ByteSink с помощью класса MoreFiles :
ByteSink byteSink = MoreFiles.asByteSink(outputFile.toPath(), StandardOpenOption.CREATE, StandardOpenOption.WRITE); byteSink.write(dataForWriting);
5. Apache Commons IO
Apache Commons IO предоставляет некоторые общие файловые задачи.
Давайте импортируем последнюю версию commons-io :
dependency> groupId>commons-iogroupId> artifactId>commons-ioartifactId> version>2.11.0version> dependency>
Теперь давайте напишем наш byte[] с помощью класса FileUtils :
FileUtils.writeByteArrayToFile(outputFile, dataForWriting);
Метод FileUtils.writeByteArrayToFile похож на другие методы, которые мы использовали, в том, что мы даем ему файл , представляющий желаемое место назначения, и двоичные данные, которые мы записываем. Если наш целевой файл или любой из родительских каталогов не существует, они будут созданы.
6. Заключение
В этом коротком руководстве мы узнали, как записывать двоичные данные из byte[] в файл, используя обычную Java и две популярные служебные библиотеки Java: Google Guava и Apache Commons IO.
Как всегда, код примера доступен на GitHub .
- 1. Обзор
- 2. Java ввод/вывод
- 3. Java НИО
- 4. Google Гуава
- 4.1. Файлы гуавы
- 4.2. БайтСинк
Запись массива в файл
Всем привет!
Ребята, не могу понять где ошибка. Пытаюсь записать массив в файл.метод записи вот
1 2 3 4 5 6 7 8 9 10 11 12
public void WriteFile() throws IOException { CreateArray(); try (FileWriter filewriter = new FileWriter("Test.txt")) { for (int i=0;i3;++i) for (int j=0;j3;++j) filewriter.write(massiv[i][j]); filewriter.flush(); } }
На всякий случай привожу весь код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
package test; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; /** * * @author Ноут */ public class Test { private int[][] massiv; File file = new File("Test.txt"); public Test() throws IOException { file.createNewFile(); massiv = new int[3][3]; CreateArray(); } private void CreateArray() { for (int i=0;i3;++i) for (int j=0;j3;++j) massiv[i][j] = 1; } public void WriteFile() throws IOException { CreateArray(); try (FileWriter filewriter = new FileWriter("Test.txt")) { for (int i=0;i3;++i) for (int j=0;j3;++j) filewriter.write(massiv[i][j]); filewriter.flush(); } } public void ReadFile() throws FileNotFoundException, IOException { Scanner scannerfile = new Scanner(file); for(int i=0;i3;++i) { for (int j=0;j3;++j) { if(scannerfile.hasNextInt()) massiv[i][j]=scannerfile.nextInt(); } } System.out.print("Введенный массив\n"); for(int i=0;i3;++i) { for (int j=0;j3;++j) { System.out.print(massiv[i][j] + " "); } System.out.print("\n"); } } public static void main(String[] args) throws IOException { Test test = new Test(); test.WriteFile(); } }
Заранее спасибо!
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:Запись массива в файл
Как правильно записать строковое представление чисел в файл? public static void.Запись рандомного массива в файл
Здравствуйте, задание: одномерный массив размером 5 заполнить рандомно, вывести на консоль, и.Запись огромного количества строк из массива в файл Excel
Предположим, что есть очень большой массив строковых данных (рассчитываем на пару миллионов, в.
Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран
1.Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран.unixforum.org
Как записать массив типа long в файле? (java)
6 сообщений • Страница 1 из 1
AMD Сообщения: 478 Статус: Maestro ОС: Linux Kubuntu 7.10 Контактная информация:Как записать массив типа long в файле? (java)
Сообщение AMD » 05.06.2008 08:56
Как записать массив типа long в файле на java? и потом его прочитать
Насколько я знаю FileInputStream записывает побайтно а у лонга длина 8байтов
или скажем какой метод есть чтобы переделать 1лонг в массив из 8байтовСпасибо сказали:
dey Сообщения: 335 ОС: OpenSuse 11.1Re: Как записать массив типа long в файле? (java)
Сообщение dey » 05.06.2008 09:37
Есть специальные потоки для записи определенных типов данных, DataOutputStream к примеру:
//инициализируем выходной поток DataOutputStream out=new DataOutputStream(new FileOutputStream("/home/user/file.txt")); //запись в файл for(long e:long_array) out.writeLong(e); //закрытие потока out.close();В сознательных действиях должен присутствовать существенный неалгоритмический компонент.
Roger Penrose,The Emperor’s New MindСпасибо сказали:
AMD Сообщения: 478 Статус: Maestro ОС: Linux Kubuntu 7.10 Контактная информация:Re: Как записать массив типа long в файле? (java)
Сообщение AMD » 05.06.2008 09:50
05.06.2008 09:37
Есть специальные потоки для записи определенных типов данных, DataOutputStream к примеру://инициализируем выходной поток DataOutputStream out=new DataOutputStream(new FileOutputStream("/home/user/file.txt")); //запись в файл for(long e:long_array) out.writeLong(e); //закрытие потока out.close();попробую этот метод
Но не очень то устраивает
я в файле хочу записывать разные типы данных
int
short
long
float
double
Stringконечно удобнее все конвертировать все в байты сохранить а при чтение загрузить обратно байты и отконвертировать в соответствующий тип
Мне нужно контролировать позицию курсора в файле побайтно
Ну а удобнее всего записывать переменную того типа которую есть к примеру если запишу переменную лонг то курсор должен сместится на 8 байтов
тоже самое при чтенииСпасибо сказали:
dey Сообщения: 335 ОС: OpenSuse 11.1Re: Как записать массив типа long в файле? (java)
Сообщение dey » 05.06.2008 09:57
05.06.2008 09:50
[Не очень то устраивает
я в файле хочу записывать разные типы данных
int
short
long
float
double
Stringконечно удобнее все конвертировать все в байты сохранить а при чтение загрузить обратно байты и отконвертировать в соответствующий тип
Может я не понял постановки задачи но вообще то у данного класса есть свои методы для записи каждого типа данных, как то writeInt(), writeDouble(), writeShort() и т.д.
В сознательных действиях должен присутствовать существенный неалгоритмический компонент.
Roger Penrose,The Emperor’s New MindСпасибо сказали:
AMD Сообщения: 478 Статус: Maestro ОС: Linux Kubuntu 7.10 Контактная информация:Re: Как записать массив типа long в файле? (java)
Сообщение AMD » 05.06.2008 10:40
Хорошо опишу ситуацию что хочу сделать
маленький файл с базой данных
1 колонка long (8byte)
2 колонка String 20 simvolov (40byte в unicode)
3 колонка вouble (8byte)итого длина строки 56bytes
в базу записываю по строки и читаю по строкам
база предполагает что я могу заменить значения в предыдущих записях
к примеру имею в базе 10 записей итого длина файла 560 bytes
хочу поменять значение в 3колонке строка 5 это будет байт 272 (4*56+8+20*2)
и сдесь записываю out.writeDouble(v)но как мне перемещять курсор в эту позицию файла или указать в какую позицию записывать?
вроде только RandomAccessFile имеет методы getFilePointer( ) для нахождения местоположения в файле, seek( ) для перемещения в новую точку в файле
но DataOutputStream не работает с RandomAccessFile