Запись и чтение из файла в java

Artur

Есть int[] массив, в нём такие целые числа: 18 3 34 35 8 0 22 10, как записать это в файл .txt и считать чтобы получить не 1 8 3 3 4 3 5 8 и т.д. или ASCI-коды, а первоначальную строку? Спасибо!

3 ответа

Artur

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class FileReadWriteExample {

static final File FILE = new File("tester/hello.txt");
static Integer[] array = {18, 3, 34, 35, 8, 0, 22, 10};

public static void main(String[] args) throws IOException {
    writeArray(array, FILE);
    Integer[] array = readArray(FILE);
    System.out.println(Arrays.asList(array));
}

static void writeArray(Integer[] array, File file) throws FileNotFoundException{
    PrintStream printStream = new PrintStream(file);
    for(Integer i : array) {
        printStream.print(i);
        printStream.append(' ');
    }
}

static Integer[] readArray(File file) throws FileNotFoundException{
    Scanner scanner = new Scanner(file);
    List<integer> list = new ArrayList<>();
    while (scanner.hasNext()){
        list.add(scanner.nextInt());
    }
    Integer[] array = new Integer[list.size()];
    list.toArray(array);
    return array;
}

}
</integer>


Artur

Самый простой способ:

import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.logging.Logger;

    public class ******** {
        private static final Logger LOG = Logger.getLogger(********.class.getName());

        public static void main(String[] args) {
            int[] a = {18, 3, 34, 35, 8, 0, 22, 10};

            try {
                File file = File.createTempFile("www", ".txt");
                System.out.println(file.getAbsolutePath());

                try (FileWriter fileWriter = new FileWriter(file);) {
                    for (int i : a) {
                        fileWriter.write(i);
                    }
                    fileWriter.flush();
                }

                List<integer> listInt = new ArrayList();

                try (FileReader fileReader = new FileReader(file)) {
                    int ch;
                    while ((ch = fileReader.read()) != -1) {
                        listInt.add(ch);
                    }

                    Integer[] newA = new Integer[listInt.size()];
                    newA = listInt.toArray(newA);
                    System.out.println(Arrays.toString(newA));
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
</integer>


Artur

С помощью сериализации (даже без библиотек) можно реализовать так:

  1. типизированно

    public static void main(String[] args) throws Exception {
        int mass[] = {8, 16, 32};
    
        ByteBuffer buffer = ByteBuffer.allocate(mass.length * 4);
        buffer.asIntBuffer().put(mass);
    
        Files.write(Paths.get(tmp.txt), buffer.array(), StandardOpenOpetion.CREATE, StandardOpenOption.WRITE);
    
        int massRead[] = new int[mass.length];
    ByteBuffer.wrap(Files.readAllBytes(Paths.get("tmp.txt"))).asIntBuffer().get(massRead);
    
        System.out.println(Arrays.equals(mass, massRead));
    }
    1. без типизации

      public static void main(String[] args) throws Exception { int mass[] = {8, 16, 32};

      // добавить закрытие стримов
      new ObjectOutputStream(new FileOutputStream("tmp.txt")).writeObject(mass);

      int massRead[] = (int[]) (new ObjectInputStream(new FileInputStream("tmp.txt")).readObject());

      System.out.println(Arrays.equals(mass, massRead));

      }

PS под рукой нет среды разработки, писал в блокноте, поправьте если что не так

licensed under cc by-sa 3.0 with attribution.