Week 1 -2-3-4-5-6
5 stars based on
You could do it by looking at a few samples. Scanner and Formatterand C-like printf and format methods for formatted output using format specifiers.
It also introduces a new try -with-resources syntax to simplify the coding of close method. File can represent either a file or a directory. Pathwhich overcomes many limitations of java. A path string is used to locate a file or a directory. Unfortunately, path strings are system dependent, e. A path could be absolute beginning from the root or relative which is relative to a reference directory. File class maintains these system-dependent properties, for you to write programs that are portable:.
You can construct a File instance with a path string or URI, as follows. A file URL takes the form of file: For applications that you intend to distribute as JAR files, you should use the URL class to reference the resources, as it can reference disk files as well as JAR'ed filesfor example. The following program recursively lists the contents of a given directory similar to Unix's "ls -r" command. You can apply a filter to list and listFilesto list only files that meet a certain criteria.
FilenameFilter declares one abstract method:. You can program your filtering criteria in accept. The following program lists only files that meet a certain filtering criteria.
Programs read inputs from data sources e. A stream is a sequential and contiguous one-way flow of data just like water or oil flows through the pipe.
It is important to mention that Java does not differentiate between the various types of data sources or sinks e. They are all treated as a sequential flow of data. The Java program receives data from a source by opening an input stream, and sends data to a sink by opening an output stream. If your program needs to perform both input and output, you have to open two streams - an input stream and an output stream.
Java internally stores characters char type in bit UCS-2 character set. All the byte streams are derived from the abstract superclasses InputStream and OutputStreamas illustrated in the class diagram. The abstract superclass InputStream declares an abstract method read to read one data-byte from the input source:.
The read method returns an int instead of a bytebecause it uses -1 to indicate end-of-stream. The term " block " means that serial and binary search in java recursion method and the program will be suspended. The program will resume only when the method returns. Two variations of read methods are implemented in the InputStream for reading a block of bytes into a byte-array. It returns the number of bytes read, or -1 if "end-of-stream" encounters. Similar to the input counterpart, the abstract superclass OutputStream declares an abstract method write to write a data-byte to the output sink.
The least-significant byte of the int argument is written out; the upper 3 bytes are discarded. Similar to the readtwo variations of the write method to write a block of bytes from a byte-array are implemented:. Both the InputStream and the OutputStream provides a close method to close the stream, which performs the necessary clean-up operations to free up the system resources. This could prevent serious resource leaks.
Unfortunately, the close method also throws a IOExceptionand needs to be enclosed in a nested try-catch statement, as follows. This makes the codes somehow ugly. This produces much neater codes. In addition, the OutputStream provides a flush method to flush the remaining bytes from the output buffer.
InputStream and OutputStream are abstract classes that cannot be instantiated. You need to choose an appropriate concrete subclass to establish a connection to a physical device. For example, we can layer a BufferedInputStream to a FileInputStream for buffered input, and stack a DataInputStream in front for formatted data input using primitives such as intdoubleas illustrated in the serial and binary search in java recursion diagrams.
This is grossly inefficient, as each call is handled by the underlying operating serial and binary search in java recursion which may trigger a serial and binary search in java recursion access, or other expensive operations. To chain the streams together, simply pass an instance of one stream into the constructor of another stream.
This example copies a file by reading a byte from the input file and writing it to the output file. The method close is programmed inside the finally clause. It is guaranteed to be run after try or catch.
However, method close also throws an IOExceptionand therefore must be enclosed inside a nested try-catch block, which makes the codes a little ugly.
The output shows that it took about 4 seconds to copy a KB file. As mentioned, JDK 1. For example, the above example can be re-written in a much neater manner as follow:.
This program took only 3 millisecond - a more than times speed-up compared with the previous example. However, there is a trade-off between speed-up the the memory usage. For file copying, a large buffer is certainly recommended. But for reading just a few bytes from a file, large buffer simply wastes the memory. I re-write the program using JDK 1. The JRE decides on the buffer size. The program took 62 milliseconds, about 60 times speed-up compared with example 1, but slower than the programmer-managed buffer.
To use DataInputStream for formatted input, you can chain up the input streams as follows:. DataInputStream implements DataInput interface, which provides methods to read formatted primitive data and Stringsuch as:.
DataOutputStream implements DataOutput interface, which provides methods to write formatted primitive data and String. The following program writes some primitives to a disk file. It then reads the serial and binary search in java recursion bytes to check how the primitives were stored. Finally, it reads the data as primitives. The data stored in the disk are exactly in the same form as in the Java program internally e. The byte-order serial and binary search in java recursion big-endian big byte first, or most significant byte in lowest address.
If this character is to be written to a file uses UTF-8, the character stream needs to translate " 60 A8 " to " E6 82 A8 ". The reserve takes place in a reading operation. This is because some charsets use fixed-length of 8-bit e. When a character stream is used to read an 8-bit ASCII file, an 8-bit data is serial and binary search in java recursion from the file and put into the bit char location of the Java program.
The abstract superclass Reader operates on char. It declares an abstract method read to read one character from the input source. There are also two variations of read to read a block of characters into char -array. The abstract superclass Writer declares an abstract method writewhich writes a character to the output sink.
The lower 2 bytes of the int argument is written out; while the upper 2 bytes are discarded. The default charset is kept in the JVM's system property " file. You can get the default charset via static method java. BufferedReader provides a new method readLinewhich reads a line and returns a String without the line delimiter. The main class java. Charset provides static methods for testing whether a particular charset is supported, locating charset instances by name, and listing all serial and binary search in java recursion available charsets and the default charset.
The default charset for file encoding is kept in the system property " file. For example, the following command run the program with default charset of UTF The following example encodes some Unicode texts in various encoding scheme, and display serial and binary search in java recursion Hex codes of the encoded byte sequences. As mentioned, Java internally stores characters char type in bit UCS-2 character set.
You can list the available charsets via static method java. The commonly-used Charset names supported by Java are:. The following program writes Unicode texts to a disk file using various charsets for file encoding.
It then reads the serial and binary search in java recursion byte-by-byte via a byte-based input stream to check the encoded characters in the various charsets.
Finally, it reads the file using the character-based reader. Primitives are converted to their string representation for printing. The printf and format were introduced in JDK 1. Instead, it sets an internal flag which can be checked via the checkError method. A PrintStream can also be created to flush the output automatically. The standard output and error streams System.
All characters printed by a PrintStream are converted into bytes using the default character encoding. The Serial and binary search in java recursion class should be used in situations that require writing characters rather than bytes.
The character-stream PrintWriter is similar to PrintStreamexcept that it write in characters instead of bytes. The PrintWriter also supports all the convenient printing methods printprintlnprintf and format.