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();
        }
    }
}
Share:
23,330
PeakGen
Author by

PeakGen

CTO

Updated on June 07, 2020

Comments

  • PeakGen
    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!