Youwang Deng

I'm a software developer, familiar with C#, Java, JavaScript, focus on full stack development.

Java File I/O

25 Jun 2019 » Java

InputStream vs Reader

InputStream 
   |
   |__ FileInputStream 

FileInputStream (File  file) 

Reader
   |
   |—— BufferedReader 
   |
   |__ InputStreamReader 
         |
         |__ FileReader
        
BufferedReader (Reader  in, [int size]) 
InputStreamReader (InputStream  in, [Charset  cs])  
FileReader (File  file)

InputStream read file in bytes, Reader read file in chars

InputStreamReader vs FileReader

InputStreamReader can handle all input streams, not just files. Other examples are network connections, classpath resources and ZIP files

InputStreamReader could specific CharSet encoding

Why use Buffered IO

For unbuffered I/O stream, each read or write request is handled directly by the underlying OS. This can make a program much less efficient, since each such request often triggers disk access, network activity, or some other operation that is relatively expensive.

Example to use InputStreamReader or FileReader

InputStreamReader

try {
    File file = new File("test.txt");
    FileInputStream fis = new FileInputStream(file);
    InputStreamReader isr = new InputStreamReader(fis);
    BufferedReader reader = new BufferedReader(isr);
} catch(Exception e) {
    e.printStackTrace();
}

FileReader

try {
    File file = new File("test.txt");
    FileReader fr = new FileReader(file);
    BufferedReader reader = new BufferedReader(fr);
} catch(Exception e) {
    e.printStackTrace();
}

Write into file using Buffered IO

try {
    File file = new File("test.txt");
    FileInputStream fis = new FileInputStream(file);
    InputStreamReader isr = new InputStreamReader(fis);
    BufferedReader reader = new BufferedReader(isr);

    File file2 = new File("test2.txt");
    FileOutputStream fos = new FileOutputStream(file2);
    OutputStreamWriter osw = new OutputStreamWriter(fos);
    BufferedWriter writer = new BufferedWriter(osw);

    String s;
    
    while((s = reader.readLine()) != null){
        writer.write(s, 0, s.length());
        writer.newLine();
        // do not forget
        writer.flush();
    }
    isr.close();
    osw.close();
}
catch(IOException e) {
    System.out.println(e);
}