如何在java中将转换为字节数组的文本文件内容写入另一个文本文件
我将文本文件内容转换为字节数组。我想将它重写到另一个文本文件中,但BufferedWriter将其全部写在一行中。如何修复它?我希望它和原版完全一样 我就是这样做的:如何在java中将转换为字节数组的文本文件内容写入另一个文本文件,java,eclipse,byte,filewriter,bufferedwriter,Java,Eclipse,Byte,Filewriter,Bufferedwriter,我将文本文件内容转换为字节数组。我想将它重写到另一个文本文件中,但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; i
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并提前表示感谢
*编辑
我知道将文件内容写入另一个文件不需要转换。修复此问题:
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();
}
}
}
用于读取的BufferedReader不包括换行符a.i.r。请尝试将其添加回刚刚读取的行。也就是说,从一个文本文件复制到另一个文本文件不需要转换,因此可以将读取的行写回。@Joost Papendop我编辑了我的问题,很抱歉它不完整。添加此al.add\n.getBytes完全符合我的预期;谢谢这仍然不是一个安全的复制操作。例如,这会将\r\n换行符粉碎为\r\n。尝试用此文件复制例如png可能会损坏它。无法查看png文件与OP的问题(他指定的文本在哪里)之间的关系files@VictorPoloDeGyvesMontero在与*nix不同的操作系统上读取文本文件时会发生这种情况。使用System.lineSeparator修复了这个问题,虽然它是一个文本文件,包含一些链接,比如:在我的例子中,它工作正常。