Не могу записать Данные из List Которые получаю из файла

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class NIOStream {

    public static void main(String[] args) {

        Path path;
        path = Paths.get("C:\\Users\\progr\\IdeaProjects\\np\\src", "baza.txt");
        List<String> lines = new ArrayList<String>();
        Charset charset = StandardCharsets.UTF_8;
        try {
            lines = Files.readAllLines(path, charset);

            for (String line : lines) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.out.println(e);
        }
        try (OutputStream fileOut = new BufferedOutputStream(Files.newOutputStream(path))){
            int n = lines.size();
            for (int i=0; i<n; i++){
                fileOut.write(Integer.parseInt(lines.get(i)));
                ;
            }

        } catch (IOException e) {
            System.out.println(e);
        }

    }
}

Ответы (1 шт):

Автор решения: am233dmg

У вас в baza.txt,только цифры или буквы тоже? Просто в вашем коде происходит запись какого либо числа спарсенного со строки, при чем эта цифра превратиться в байт(cast to byte), так как запись идет побайтно, и из-за этого каста происходит неправильное отображение символов в файл.

Ваш код:

for (int i=0; i<n; i++){
    fileOut.write(Integer.parseInt(lines.get(i)));
}

Как работает метод write в вашем случае(java.io.BufferedOutputStream):

public synchronized void write(int var1) throws IOException {
        if (this.count >= this.buf.length) {
            this.flushBuffer();
        }

        this.buf[this.count++] = (byte)var1;
    }

Попробуйте поменять на этот код (здесь вы уже у строки берете байты и записываете в файл):

for (int i=0; i<n; i++){
    fileOut.write(lines.get(i).concat("\n").getBytes(StandardCharsets.UTF_8));
}
→ Ссылка