请查看以下代码
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class FileCopy2
{ public static void main(String[]args)
{
try
{
//First in here, we are trying to get the bytes from the file
File file = new File("D:/burn/preview.mp3"); //The File you need to get
byte bufferFile[] = new byte[(int)file.length()]; //Creating a byte array, which has the exact size of the file
BufferedInputStream bi = new BufferedInputStream(new FileInputStream(file));// Creating Buffers for IO
bi.read(bufferFile, 0, bufferFile.length);//Reading the file
bi.close();//Closing Buffer
//Then in here, we are writing those bytes to a text file
BufferedOutputStream bu = new BufferedOutputStream(new FileOutputStream("C:/Users/Yohan/Desktop/test.txt")); //The output Location
bu.write(bufferFile, 0, bufferFile.length);//Writing the file
bu.flush();//Flushing the buffer
bu.close();//Closing the Buffer
System.out.println("Done Copieng");
//Here we are trying to WRITE number of .txt files containing the byte details..In other words, I am breaking the file into peaces
BufferedReader br = new BufferedReader(new FileReader("C:/Users/Yohan/Desktop/test.txt"));
BufferedWriter bw = null;
String content = "";
int count = 1;
while((content = br.readLine())!=null)
{
bw = new BufferedWriter(new FileWriter("C:/Users/Yohan/Desktop/output4/file"+count+".txt"));
bw.write(content);
bw.flush();
bw.close();
count++;
System.out.println("Running");
}
System.out.println("-----------------------Done-----------------------------");
//NOW I NEED TO read all the generated .txt file and create the original file back. How to do it? //
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
在那里,首先我获取文件的字节,然后将它们写入文本文件。然后我读取该文本文件,逐行读取,并为每一行生成一个单独的.txt文件。 现在原始程序被分成数千个文件。现在我需要读取所有.txt文件并重新生成.txt文件。我不知道怎么做最后一件事。我怎样才能做到这一点?请帮忙!
答案 0 :(得分:10)
如果您想操纵任何类型的文件,请不要认为它们包含文本数据,并将它们视为包含字节的二进制文件。使用输入和输出流读取和写入二进制文件。
这是一个读取文件并将其拆分为写入N个输出文件的1024字节的方法的示例:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileSplit {
public static void main(String[] args) throws IOException {
new FileSplit().splitFile(new File(args[0]));
}
private void splitFile(File file) throws IOException {
FileInputStream fis = new FileInputStream(file);
try {
byte[] buffer = new byte[1024];
// remaining is the number of bytes to read to fill the buffer
int remaining = buffer.length;
// block number is incremented each time a block of 1024 bytes is read
//and written
int blockNumber = 1;
while (true) {
int read = fis.read(buffer, buffer.length - remaining, remaining);
if (read >= 0) { // some bytes were read
remaining -= read;
if (remaining == 0) { // the buffer is full
writeBlock(blockNumber, buffer, buffer.length - remaining);
blockNumber++;
remaining = buffer.length;
}
}
else {
// the end of the file was reached. If some bytes are in the buffer
// they are written to the last output file
if (remaining < buffer.length) {
writeBlock(blockNumber, buffer, buffer.length - remaining);
}
break;
}
}
}
finally {
fis.close();
}
}
private void writeBlock(int blockNumber, byte[] buffer, int length) throws IOException {
FileOutputStream fos = new FileOutputStream("output_" + blockNumber + ".dat");
try {
fos.write(buffer, 0, length);
}
finally {
fos.close();
}
}
}