【问题标题】:How to write a converted to byte array text file content into another one in java如何在java中将转换为字节数组的文本文件内容写入另一个文件
【发布时间】:2023-04-08 21:33:01
【问题描述】:

我将文本文件内容转换为字节数组。我想将其重写为另一个文本文件,但 BufferedWriter 将其全部写入一行,我该如何解决?我希望它和原来的完全一样

这就是我的做法:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;

public class StringToBinary_Converter {
    public static ArrayList<byte[]> al = new ArrayList<byte[]>();

    public static void main(String[] args) {
        try {

            BufferedReader br = new BufferedReader(new FileReader(new File("A.txt")));
            String input;
            while ((input = br.readLine()) != null) {
                al.add(input.getBytes());

            }

            PrintStream ps = new PrintStream("B.txt");
            System.setOut(ps);

            for (int i = 0; i < al.size(); i++) {
                for (int j = 0; j < al.get(i).length; j++) {
                    System.out.println(al.get(i)[j]);
                }
            }

            for (int i = 0; i < al.size(); i++) {
                for (int j = 0; j < al.get(i).length; j++) {

    System.out.println(Integer.toBinaryString(Integer.parseInt(String.valueOf(al.get(i)[j]))));
                }
            }

            for (int i = 0; i < al.size(); i++) {
                for (int j = 0; j < al.get(i).length; j++) {

    System.out.println(Integer.toHexString(Integer.parseInt(String.valueOf(al.get(i)[j]))));
                }
            }

            try (BufferedWriter bw = new BufferedWriter(new FileWriter("C.txt"));) {
                for (int i = 0; i < al.size(); i++) {
                    bw.write(new String(al.get(i), StandardCharsets.UTF_8));
                }

            } catch (IOException e) {
                e.getMessage();
            }

        } catch (IOException e) {
            e.getMessage();
        }

    }

}

我正在使用 Eclipse,提前致谢。

*编辑 我知道将文件内容写入另一个文件不需要转换。

【问题讨论】:

  • 用于阅读的BufferedReader 不包括换行符 a.i.r.尝试将其添加回刚刚读取的行。也就是说,从一个文本文件复制到另一个文件不需要转换,因此只需将读取的行写回即可。
  • @Joost Papendorp 我编辑了我的问题很抱歉它不完整。

标签: java eclipse byte filewriter bufferedwriter


【解决方案1】:

解决这个问题:

        while ((input = br.readLine()) != null) {
            al.add(input.getBytes());
            al.add('\n');

        }

你正在逐行阅读,所以新行丢失了,你需要重新添加。

这将完成所有工作:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;

public class StringToBinary_Converter{
    public static ArrayList<byte[]> al = new ArrayList<byte[]>();

    public static void main(String[] args) {
        try {

            BufferedReader br = new BufferedReader(new FileReader(new File("A.txt")));
            String input;
            while ((input = br.readLine()) != null) {
                al.add(input.getBytes());
            }

            PrintStream ps = new PrintStream("B.txt");
            System.setOut(ps);

            for (int i = 0; i < al.size(); i++) {
                String line = new String(al.get(i));
                for (int j = 0; j < al.get(i).length; j++) {
                    System.out.print((char)al.get(i)[j]);
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.getMessage();
        }

    }

}

【讨论】:

  • 完全按照我的预期添加这个 al.add("\n".getBytes());谢谢
  • 这仍然不是安全复制操作。例如,这会将\r\n 换行符粉碎成\n。试图复制例如带有这个的 png 可能会损坏它。
  • 看不到 PNG 文件与 OP 指定文本文件的问题有何关联
  • @VictorPoloDeGyvesMontero 在与 *nix 不同的操作系统上读取文本文件时会执行此操作。使用System.lineSeparator() 可以解决这个问题
  • 这是一个包含一些链接的文本文件(例如:google.com),就我而言,它运行良好。
猜你喜欢
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多