Java: Reading bytes from a .txt file LINE BY LINE
23,330
If you want to manipulate any kind of file, never consider they contain textual data, and consider them as binary files, containing bytes. Binary files are read and written using input and output streams.
Here's an example of a method that reads a file and splits it into pieces of 1024 bytes written to N output files :
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();
}
}
}
Comments
-
PeakGen almost 4 years
Please have a look at the following code
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(); } } }
In there, first I get the bytes of a file, and write them to a text file. Then I read that text file, read line by line, and generate a separate .txt file for each line. Now the original program is split into thousands of files. Now I need to read all the .txt files and re generate the .txt file. I don't know how to do the last thing. How can I do that? Please help!