In general, there are two types of read and write operations in Java: character streams and byte flows .
What is a stream?
The flow is an abstract concept. When a Java program needs to read data from a data source, it opens a stream to the data source. The data source can be a file, memory, or network. Similarly, when a program needs to output data to a destination, it also opens a stream, and the data destination can be a file, memory, or network. The stream is created to handle the input and output of the data more easily.
So what's the difference between a byte stream and a character stream?
1. The byte stream is also called the raw data, which requires the user to read the code and convert it accordingly. The implementation of the character stream is based on automatic conversion, and the data is automatically converted into characters according to the JVM's default encoding when reading the data.
2. The character stream processing unit is a 2-byte Unicode character that operates on a character, character array, or string, and the byte stream processing unit is 1 bytes, manipulating bytes and byte arrays.
So the character stream is made up of characters that the Java Virtual machine converts bytes into 2-byte Unicode characters.
3. Byte stream can be used for any type of object, including binary objects, while character streams only handle characters or strings, byte stream provides the ability to handle any type of IO operation, but it cannot directly handle Unicode characters, and the character stream can be;
Based on the above differences, then under what circumstances use a character stream, under what circumstances with a word stream?
stream End is byte stream ,reader and writer end are character stream
The difference between the two is read and write, one is read by Byte, and the other is by character. The actual use is usually similar.
Reading and writing a file requires that the content be processed in rows , such as comparing specific characters, and a character stream is typically selected when processing a row of data.
Just read and write files, and the contents of the file independent, the general choice of byte stream.
If it is audio files, pictures, songs, it is better to use the word stream, if it is Chinese (text), with a character stream is preferable;
Say so much, the word stream and character stream processing files in the end how to use it?
Let's take a look at it. In Java, what are the steps to input and output operations?
1 opening a file using the file class
2 Specify the location of the output by a subclass of Byte stream or character stream
3 for read/write operations
4 off input/output
IO operation is a resource operation, always remember to close
Actual combat code
Read and write text files
Packagecnki.common.test;ImportJava.io.File;ImportJava.io.FileInputStream;ImportJava.io.FileOutputStream;Importjava.io.IOException;ImportJava.io.OutputStream;Importjava.util.ArrayList;ImportJava.util.Iterator;Importjava.util.List;Importorg.apache.commons.io.FileUtils;Importorg.apache.commons.io.IOUtils;Importorg.junit.Test; Public classTest {@Test Public voidFunction2 ()throwsIOException {File file=NewFile ("C:\\users\\wangzl\\desktop\\file\\file.txt"); List<String> list =NewArraylist<string>(); List.add ("Aaa1"); List.add ("BBB1"); List.add ("CCC1"); //Write by FileUtils (overwrite original text)Fileutils.writelines (file, "UTF-8", list); //Write by Ioutils (overwrite original text)Ioutils.writelines (list,NULL,Newfileoutputstream (file)); //AppendOutputStream OS =NewFileOutputStream (file,true);//The second argument, True, indicates an appendIoutils.writelines (list,NULL, OS, "UTF-8"); //read by FileUtilslist<string> lines_fileutils = fileutils.readlines (file, "UTF-8"); //read by Ioutilslist<string> lines_ioutils = Ioutils.readlines (NewFileInputStream (file), "UTF-8"); //TraverseIterator<string> it =Lines_fileutils.iterator (); while(It.hasnext ()) {System.out.println (It.next ()); }} @Test Public voidfunction1 () {Try{File File=NewFile ("C:\\users\\wangzl\\desktop\\file\\file.txt"); List<String> list = fileutils.readlines (file, "UTF-8"); //method One: Super for loop traversal for(String item:list) {System.out.println (item); } //method Two: For the ArrayList speed is faster, with a for loop, the size of the conditional traversal: for(inti = 0; I < list.size (); i++) {System.out.println (List.get (i)); } //method Three: The general traversal of the collection class, from an earlier version, with an iterator iterationIterator<string> it =List.iterator (); while(It.hasnext ()) {System.out.println (It.next ()); } } Catch(IOException e) {e.printstacktrace (); } }}
View Code
Recursively gets the files in the specified directory
//recursively gets the files in the specified directory Public voidgetallfilesbyrecursive (String path) {File file=NewFile (path); if(File.exists ()) {file[] files=File.listfiles (); if(Files.length = = 0) {System.out.println ("The folder is empty!"); return; } Else { for(File file2:files) {if(File2.isdirectory ()) {System.out.println ("Folder:" +File2.getabsolutepath ()); Getallfilesbyrecursive (File2.getabsolutepath ()); } Else{System.out.println ("File:" +File2.getabsolutepath ()); } } } } Else{System.out.println ("File does not exist!"); } }
recursively gets the files in the specified directory
Https://www.cnblogs.com/zyp777/p/8906143.html
Http://www.cnblogs.com/Java3y/p/9036728.html
Java Starter Series (10) Java IO