Java basics-I/O (3) and java basics I/O
1. Pipeline Flow
Demo: PipedInputStream and PipedOutputStream
Note: Pipeline streams are not recommended in one thread because the data written to the output stream is saved to an array of 1024 bytes in the input stream, if the written content exceeds the size of this array and is not read by the input stream, the thread where the output stream is located will wait. If it is in the same thread, this thread will be deadlocked and is not recommended in the same thread. (API)
Import java. io. IOException; import java. io. pipedInputStream; import java. io. pipedOutputStream; public class Test17 {public static void main (String [] args) throws IOException, InterruptedException {Sender sender = new Sender (); extends er extends ER = new worker Er (); pipedOutputStream out = sender. getOut (); PipedInputStream in = cycler. getIn (); in. connect (out); // out. connect (in); // This can also be sender. start (); Thread. sleep (10); sleep er. start () ;}// Sender class Sender extends Thread {private PipedOutputStream out = new PipedOutputStream (); public void run () {try {int I = 1; while (true) {Thread. sleep (2000); String msg = "Hello, this is the message" + I ++ "; out. write (msg. getBytes () ;}} catch (Exception ex) {ex. printStackTrace () ;}} public PipedOutputStream getOut () {return this. out ;}// Receiver class extends er extends Thread {private PipedInputStream in = new PipedInputStream (); public void run () {try {while (true) {byte [] buff = new byte [1024]; int len = in. read (buff); String str = new String (buff, 0, len); System. out. println (str) ;}} catch (Exception ex) {ex. printStackTrace () ;}} public PipedInputStream getIn () {return this. in ;}// Pipe closed occurs when the pipeline is closed and the sender is still sending
Ii. File cutting and merging
Public static void merget2 () throws Exception {OutputStream out = new FileOutputStream ("c:/src_new.zip"); BufferedOutputStream bos = new BufferedOutputStream (out); for (int I = 1; I <= 20; I ++) {InputStream in = new FileInputStream ("c:/src _" + I); byte [] buff = new byte [in. available ()]; in. read (buff); bos. write (buff); in. close ();} bos. close (); System. out. println ("merged successfully");} public static void merge () throws Exception {OutputStream out = new FileOutputStream ("c:/src_new.zip"); for (int I = 1; I <= 20; I ++) {InputStream in = new FileInputStream ("c:/src _" + I); byte [] buff = new byte [in. available ()]; in. read (buff); out. write (buff); in. close ();} out. close (); System. out. println ("merged successfully ");}
Iv. File Overview
A stream can only operate on data.
The File class is the only class in the IO package that represents the disk File itself.
File defines some platform-independent methods to operate files.
File: the abstract representation of the File and directory path. // The path is also a file
Used to encapsulate files or folders into objects.
Convenient operations on file and folder attributes
File object. The constructor that is often used as a parameter to pass to the stream.
The File class cannot access the File content, that is, it cannot read or write data from the File. It can only operate on the attributes of the File.
5. Common File Operations
Boolean createNewFile () // create a new file. If the file is successfully created, true is returned. Otherwise, false is returned. If the file already exists, false is returned, which is different from the stream and overwrites the stream.
Mikdir () mikdirs // create a directory, which can create multi-level Directories
Boolean delete () // delete the file or directory represented by this abstract path name. If the path name indicates a directory, the directory must be empty before deletion. Otherwise, false is returned.
Void deleteOnExit () // when the VM is terminated, delete the file or directory. Note that its return type is void because the VM is terminated. Of course, the return value is useless.
Exists () // test whether the file or directory represented by this abstract path name exists.
IsDirectory () // determine whether it is a directory
IsFile () // determine whether it is a file
IsHidden () // checks whether the object is hidden.
Static void fileDemo () throws IOException {File f1 = new File ("1.txt"); // File f2 = new File (" c: \ 2.txt") in the current path "); file f3 = new File ("c: \", "3.txt"); File f4 = new File (" c: \ "); File f5 = new File (f4, "5.txt"); // File (File parent, String child)/* f1.createNewFile (); f2.createNewFile (); f3.createNewFile (); System. out. println (f4.createNewFile (); // return false f5.createNewFile (); * // * System. out. println (f1.delete (); // true System. out. println (f2.delete (); // true System. out. println (f3.delete (); // true System. out. println (f4.delete (); // false System. out. println (f5.delete (); // true * // System. out. println (new File ("c:/aaa "). delete (); // (aaa is a folder) If there is content under aaa, false is returned; otherwise, true is returned, and delete the folder/* File f = new File ("c: \ BBBSSS \ 1.txt \ cc \ dd "); // In this example, 1.txt will also be used as the folder name f. mkdirs (); // when creating multiple levels, use mkdirs (); new File ("c:/forlder1 "). mkdir (); // only the first-level directory can be created * // * File ff = new File ("c: \ nonexistent File .txt"); System. out. println (ff. isDirectory (); // false System. out. println (ff. isFile (); // false System. out. println (ff. isHidden (); // false * // * File ff = new File ("c: \ nonexistent File .txt"); ff. createNewFile (); System. out. println (ff. isDirectory (); // false System. out. println (ff. isFile (); // true System. out. println (ff. isHidden (); // false */File ff = new File ("c: \ nonexistent File .txt"); ff. mkdir (); System. out. println (ff. isDirectory (); // true System. out. println (ff. isFile (); // false System. out. println (ff. isHidden (); // false // note that for files, folders, isDirectory, and isFile that have not been created, false is returned. To obtain the correct result, you must first use exists to determine the result}
6. File Operations
String getName (); // name of the returned file or directory
String getParent (); // returns the name of the parent directory. If no value exists, null is returned.
String getPath (); // return path String ??? File name included
String getAbsolutePath (); // returns the absolute path name String
// File getAbsoluteFile (); // returns the absolute path name. Equivalent to new File (this. getAbsolutePath ())
Long length (); // The length of the returned file, in bytes
Static File [] listRoots () // list available File systems. In windows, drive letters such as c d e are listed.
String [] list () // returns the files and directories in the directory (that is, returned together with the file name) (hidden files will also be returned)
String [] list (FilenameFilter filter) // returns the files and directories filtered by the specified filter.
File [] listFiles () // return all files in the current directory
File [] listFiles (FilenameFilter filter)
Public static void fileInfoDemo () {File f = new File ("c: \ Test \ 1.txt"); System. out. println ("getName --" + f. getName (); // 1.txt System. out. println ("getParent () --" + f. getParent (); // c: \ Test System. out. println ("getPath () --" + f. getPath (); // c: \ Test \ 1.txt System. out. println ("getAbsolutePath --" + f. getAbsolutePath (); // c: \ Test \ 1.txt System. out. println ("length () --" + f. duration (); // 1234 File [] fileList = File. listRoots (); for (File file: fileList) {System. out. println (file); // print C: \ D: \ and so on }}
If you replace the above File path with File f = new File ("1.txt"); // use a relative path, the result is: getName--1.txt getParent () -- null getpath(%--1.txt getAbsolutePath -- C: \ workspace \ Lession21 \ 1.txt length () -- 0 A: \ C: \ D: \ E :\
// Display all static void listDemo () {File f = new File ("C:/folder A/"); String [] nameList = f. list (); for (String str: nameList) {System. out. println (str );}}
// Example: static void filterDemo () {File f = new File ("C:/folder A/ Emy thesis collection/ 文 ") with filtering "); file [] fileList = f. listFiles (new FilenameFilter () {public boolean accept (File dir, String name) {return! Name. endsWith (". exe "); // only view the exe File}); for (File item: fileList) {System. out. println (item. getName ());}}
VII. Recursive operations
Recursively view contents in the directory
Public static void main (String [] args) {recuDir (new File ("C: \ job \ 8.13");} static void recuDir (File dir) {System. out. println ("------------------"); File [] fileList = dir. listFiles (); for (File f: fileList) {if (f. isDirectory () {recuDir (f); // recursive call} else {System. out. println (f. getName ());}}}
8. RandomAccessFile
The most functional file handler class in java
Supports "Random Access"
You can jump to any location of the file to read and write data.
This type of object has an indicator pointing to the current read/write position. After reading and writing n Bytes, the file indicator points to the next byte of the n bytes.
When the file is opened, the indicator points to the beginning of the file, you can move the indicator to a new location
It has a great advantage in the random reading of long record format files, but it is limited to Operating Files and cannot access other io devices, such as networks and memory images.
RandomAccessFile Constructor
New RandomAccessFile (f, "rw"); // read/write method (created if the object does not exist)
New RandomAccessFile (f, "r"); // read-only mode
Public static void main (String [] args) throws IOException {final int LEN = 8;/* Student stu1 = new Student (20, "cat "); student stu2 = new Student (21, "sheep"); Student stu3 = new Student (15, "duck"); RandomAccessFile r = new RandomAccessFile ("c:/stu.txt ", "rw"); r. write (stu1.name. getBytes (); r. writeInt (stu1.age); r. write (stu2.name. getBytes (); r. writeInt (stu2.age); r. write (stu3.name. getBytes (); r. writeInt (stu3.age); r. close (); */RandomAccessFile read = new RandomAccessFile ("c:/stu.txt", "rw"); read. skipBytes (12); // skip the information of the first student. The age is 4 bytes and the name is 8 bytes. out. println ("second student information:"); String str = ""; for (int I = 0; I <LEN; I ++) {str ++ = (char) read. readByte ();} System. out. println ("name:" + str); System. out. println ("age:" + read. readInt (); System. out. println ("first student information:"); read. seek (0); str = ""; for (int I = 0; I <LEN; I ++) {str + = (char) read. readByte ();} System. out. println ("name:" + str); System. out. println ("age:" + read. readInt (); System. out. println ("Third Student Information:"); read. skipBytes (12); str = ""; for (int I = 0; I <LEN; I ++) {str + = (char) read. readByte ();} System. out. println ("name:" + str); System. out. println ("age:" + read. readInt (); read. close ();}
9. Detailed description of the Properties class
Properties is a subclass of HashTable. It adds the function of saving keys and values to the stream or reading from the stream. If you want to use the properties. store () method to store the object content, the keyword and value must be String type. You can load the key-Value Pair information from the stream void load (InputStream inStream) to read the attribute list (key-and element-Pair) from the input stream ).
Set <String> stringPropertyNames () returns the key Set in this attribute list.
Note: Try not to use Chinese Characters
Public static void main (String [] args) throws IOException {Properties settings = new Properties (); settings. load (new FileInputStream ("c:/config. ini "); System. out. println (settings. getProperty ("port"); // 8080 // Set from the stream <String> set = settings. stringPropertyNames (); // obtain all attributes for (String key: set) {System. out. println (key + ":" + settings. getProperty (key);} // enter settings. setProperty ("niceCat", "this is a niceCat"); settings. store (new FileOutputStream ("c:/config. ini ")," this is note "); System. out. println ("OK ");}