Запись массива в файл
Всем привет!
Ребята, не могу понять где ошибка. Пытаюсь записать массив в файл.
метод записи вот
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(); } }
Как записать массив в java
Вариантов записать массив в файл множество. Можем пройтись по массиву при помощи цикла и записывать элементы в файл, разделяя их пробелами:
int[] array = 1, 2, 3, 4, 5>; // Массив целых чисел // Создаем объект класса для записи в файл, передаем название файла, // указываем, что данные будут дозаписываться в конец // Используем конструкцию try-with-resources для автоматического закрытия потока try (FileWriter fileWriter = new FileWriter("example.txt", true)) for (double elem : array) // Перебираем элементы массива fileWriter.append(String.valueOf(elem)) // Записываем элементы в файл, приводим целые числа к строковому формату .append(" "); // Добавляем пробелы между элементами fileWriter.flush(); // Очищаем буфер потока > > // Cодержимое файла: 1 2 3 4 5
Второй вариант записи осуществляется через копирование элементов в список и приведение их к строковому типу:
int[] array = 1, 2, 3, 4, 5>; // Массив целых чисел ListString> data = Arrays.stream(array) // Проходим по каждому элементу массива с помощью стрима .mapToObj(String::valueOf) // Конвертируем целое число в строку .toList(); // Собираем все элементы в список Path pathToFile = Paths.get("example.txt"); // Получаем путь до файла // Записываем список элементов в файл // Указываем путь, строку, стандарт кодирования символов и // опции записи в файл Files.write(pathToFile, data, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.APPEND); // Cодержимое файла: 1 2 3 4 5
Опции записи настроены так, что создается новый файл при его отсутствии, а информация записывается в конец файла.
Как java как массив в файл сохранить
Класс FileOutputStream предназначен для записи байтов в файл. Он является производным от класса OutputStream, поэтому наследует всю его функциональность.
Через конструктор класса FileOutputStream задается файл, в который производится запись. Класс поддерживает несколько конструкторов:
FileOutputStream(String filePath) FileOutputStream(File fileObj) FileOutputStream(String filePath, boolean append) FileOutputStream(File fileObj, boolean append)
Файл задается либо через строковый путь, либо через объект File. Второй параметр — append задает способ записи: eсли он равен true, то данные дозаписываются в конец файла, а при false — файл полностью перезаписывается
Например, запишем в файл строку:
import java.io.*; public class Program < public static void main(String[] args) < String text = "Hello world!"; // строка для записи try(FileOutputStream fos=new FileOutputStream("notes.txt")) < // перевод строки в байты byte[] buffer = text.getBytes(); fos.write(buffer, 0, buffer.length); System.out.println("The file has been written"); >catch(IOException ex) < System.out.println(ex.getMessage()); >> >
Для создания объекта FileOutputStream используется конструктор, принимающий в качестве параметра путь к файлу для записи. Если такого файла нет, то он автоматически создается при записи. Так как здесь записываем строку, то ее надо сначала перевести в массив байтов. И с помощью метода write строка записывается в файл.
Для автоматического закрытия файла и освобождения ресурса объект FileOutputStream создается с помощью конструктции try. catch.
При этом необязательно записывать весь массив байтов. Используя перегрузку метода write() , можно записать и одиночный байт:
fos.write(buffer[0]); // запись первого байта
Чтение файлов и класс FileInputStream
Для считывания данных из файла предназначен класс FileInputStream , который является наследником класса InputStream и поэтому реализует все его методы.
Для создания объекта FileInputStream мы можем использовать ряд конструкторов. Наиболее используемая версия конструктора в качестве параметра принимает путь к считываемому файлу:
FileInputStream(String fileName) throws FileNotFoundException
Если файл не может быть открыт, например, по указанному пути такого файла не существует, то генерируется исключение FileNotFoundException .
Считаем данные из ранее записанного файла и выведем на консоль:
import java.io.*; public class Program < public static void main(String[] args) < try(FileInputStream fin=new FileInputStream("notes.txt")) < int i; while((i=fin.read())!=-1)< System.out.print((char)i); >> catch(IOException ex) < System.out.println(ex.getMessage()); >> >
В данном случае мы считываем каждый отдельный байт в переменную i:
while((i=fin.read())!=-1)Когда в потоке больше нет данных для чтения, метод возвращает число -1.
Затем каждый считанный байт конвертируется в объект типа char и выводится на консоль.
Подобным образом можно считать данные в массив байтов и затем производить с ним манипуляции:
import java.io.*; public class Program < public static void main(String[] args) < try(FileInputStream fin=new FileInputStream("notes.txt")) < byte[] buffer = new byte[256]; System.out.println("File data:"); int count; while((count=fin.read(buffer))!=-1)< for(int i=0; i> > catch(IOException ex) < System.out.println(ex.getMessage()); >> > В данном случае с помощью метода read() считываем данные в массив buffer длиной 256 байтов. Метод возвращает количество считанных байтов.
Поскольк файл может быть больше 256 байтов, то считываем в цикле while до конца файла. Когда больше не останется файлов для считывания, то метод возвратит -1.
while((count=fin.read(buffer))!=-1)Поскольку количество считанных байтов/размер файла могут быть меньше 256 байт, то реальное количество считанных байт сохраняем в переменную count. Затем выводим считанное количество данных на консоль в цикле for.
for(int i=0; iСовместим оба класса и выполним чтение из одного и запись в другой файл:
import java.io.*; public class Program < public static void main(String[] args) < try(FileInputStream fin=new FileInputStream("notes.txt"); FileOutputStream fos=new FileOutputStream("notes_new.txt")) < byte[] buffer = new byte[256]; int count; // считываем буфер while((count=fin.read(buffer))!=-1)< // записываем из буфера в файл fos.write(buffer, 0, count); >System.out.println("File has been written"); > catch(IOException ex) < System.out.println(ex.getMessage()); >> >Классы FileInputStream и FileOutputStream предназначены прежде всего для записи двоичных файлов, то есть для записи и чтения байтов. И хотя они также могут использоваться для работы с текстовыми файлами, но все же для этой задачи больше подходят другие классы.
Как записать и считать двумерный массив в файл
Записать двумерный строковый массив в файл и считать его
Всем привет. Есть задание "Создать файл, содержащий следующую структуру данных: «Фамилия студента;.Как считать фотографию в двумерный массив на Java?
Привет, мне нужно считать фотографию в виде 2-мерного массива, сразу, возникает вопрос, язык.Как правильно записать строки в файл и считать их?
Имеется ввиду следующее: Открывается приложение а позже это приложение должно открытся с.Как проверить двумерный массив на упорядоченность и результат записать в новый массив?
Задание звучит так: Задать рандомный массив А. Проверить строки массива А на упорядоченность по.206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
Dzirt007, Вы знаете как записывать в файл?
Регистрация: 15.03.2011
Сообщений: 16
Знаю как записывать переменную в файл, пытался так же записать массив но выводит бред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 26try(FileWriter writer = new FileWriter("C:/shag2.txt", false)) { writer.write(String.valueOf(mykalk.znach1)); writer.write(mykalk.oper); writer.write(String.valueOf(mykalk.znach2)); writer.write("="); writer.write(String.valueOf(mykalk.rez)); } catch(IOException ex){ System.out.println(ex.getMessage()); } try(FileReader reader = new FileReader("C:/shag2.txt")) { // читаем посимвольно int c; while((c=reader.read())!=-1){ System.out.print((char)c); } } catch(IOException ex){ System.out.println(ex.getMessage()); }317 / 268 / 61
Регистрация: 12.10.2011
Сообщений: 4341 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 35import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.Random; public class Main { private static int lengthArray = 10; public static void main(String[] args) { ListInteger> integers = new ArrayListInteger>(); for (int i = 0; i lengthArray; i++) { Random rn = new Random(); integers.add(rn.nextInt(10)); } Writer writer = null; try { writer = new BufferedWriter(new FileWriter("./my.txt")); writer.append(integers.toString()); writer.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (writer != null) writer.close(); } catch (IOException e) { e.printStackTrace(); } } } }2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
Сообщение было отмечено Dzirt007 как решение
Решение
не знаю что на меня нашло, но я сел и написал
что бы не загромождать код, в нем нет проверок на null и прочих красивостей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 73 74 75 76import java.io.*; import java.util.Random; public class ArrayToFile { public static void main(String[] args) { int[][] arr = new int[4][3]; initArray(arr); // заполняем массив случайными числами printArray(arr); // выводим на экран saveArrayToFile(arr, "d:\\filename.lol"); // сохраняем в файл int[][] nArr = loadArrayFromFile("d:\\filename.lol"); // читаем из файла в другой массив для проверки printArray(nArr); // выводим новый массив на экран // profit } private static void printArray(int[][] arr) { for (int i = 0; i arr.length; i++) { for (int j = 0; j arr[0].length; j++) { System.out.print(arr[i][j] + " "); } System.out.println(); } System.out.println(); } private static void initArray(int[][] arr) { Random r = new Random(); for (int i = 0; i arr.length; i++) { for (int j = 0; j arr[0].length; j++) { arr[i][j] = r.nextInt(); } } } private static void saveArrayToFile(int[][] arr, String path) { try { BufferedWriter bw = new BufferedWriter(new FileWriter(path)); bw.write(String.valueOf(arr.length)); bw.newLine(); bw.write(String.valueOf(arr[0].length)); bw.newLine(); for (int i = 0; i arr.length; i++) { for (int j = 0; j arr[0].length; j++) { bw.write(String.valueOf(arr[i][j])); bw.newLine(); } } bw.flush(); bw.close(); } catch (IOException e) { // тут совсем не обязательно писать System.out.println, оно и так выведет ошибку в консоль e.printStackTrace(); } } private static int[][] loadArrayFromFile(String path) { int[][] arr = null; try (BufferedReader br = new BufferedReader(new FileReader(path))) { // в первых 2-х строках файла цифры задают размерность массива int rows = Integer.parseInt(br.readLine()); int cols = Integer.parseInt(br.readLine()); arr = new int[rows][cols]; // создали массив который вернем из метода // магия for (int i = 0; i arr.length; i++) { for (int j = 0; j arr[0].length; j++) { arr[i][j] = Integer.parseInt(br.readLine()); } } } catch (IOException e) { e.printStackTrace(); } return arr; } }
