Как записать массив в файл java
Перейти к содержимому

Как записать массив в файл java

  • автор:

Как записать массив в файл 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.1

    Re: Как записать массив типа 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.1

    Re: Как записать массив типа 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *