Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Simple Java I/O Part I General Principles 4-May-17 Streams All modern I/O is stream-based A stream is a connection to a source of data or to a destination for data (sometimes both) An input stream may be associated with the keyboard An input stream or an output stream may be associated with a file Different streams have different characteristics: A file has a definite length, and therefore an end Keyboard input has no specific end 2 Why Java I/O is hard open use close Java I/O is very powerful, with an overwhelming number of options Any given kind of I/O is not particularly difficult The trick is to find your way through the maze of possibilities 3 Types of Streams There are 2 kinds of streams byte streams character streams Character Streams Character streams create text files. These are files designed to be read with a text editor. Java automatically converts its internal unicode characters to the local machine representation (ASCII in our case). Byte Streams Byte streams create binary files. A binary file essentially contains the memory image of the data. That is, it stores bits as they are in memory. Binary files are faster to read and write because no translation need take place. Binary files, however, cannot be read with a text editor. Classes Java has 6 classes to support stream I/O File: An object of this class is either a file or a directory. OutputStream: base class for byte output streams InputStream: base class for byte input streams Writer: base class for character output streams. Reader: base class for character input streams. RandomAccessFile: provides support for random access to a file. Note that the classes InputStream, OutputStream, Reader, and Writer are abstract classes. Three stream objects are automatically created for every application: System.in, System.out, and System.err. How to do I/O import java.io.*; Open the stream Use the stream (read, write, or both) Close the stream 9 Opening a stream open use close There is data external to your program that you want to get, or you want to put data somewhere outside your program When you open a stream, you are making a connection to that external place Once the connection is made, you forget about the external place and just use the stream 10 Output to files PrintStream: An object in the java.io package that lets you print output to a file. System.out is also a PrintStream. Any methods you have used on System.out (such as print, println) will work on every PrintStream. Printing into an output file, general syntax: PrintStream <name> = new PrintStream(new File("<file name>")); If the given file does not exist, it is created. If the given file already exists, it is overwritten. Printing to files, example Example: PrintStream output = new PrintStream(new File("output.txt")); output.println("Hello, file!"); output.println("This is a second line of output."); 12 You can use similar ideas about prompting for file names here. Closing open use close A stream is an expensive resource There is a limit on the number of streams that you can have open at one time You should not have more than one stream open on the same file You must close a stream before you can open it again Always close your streams! Java will normally close your streams for you when your program ends, but it isn’t good style to depend on this 13 Text files Text (.txt) files are the simplest kind of files Text files can be used by many different programs Formatted text files (such as .doc files) also contain binary formatting information Only programs that “know the secret code” can make sense of formatted text files Compilers, in general, work only with text 14 Simple Java I/O Part IV Scanner and printf 4-May-17 java.util.Scanner Java finally has a fairly simple way to read input First, you must create a Scanner object To read from the keyboard (System.in), do: Scanner scanner = new Scanner(System.in); To read from a file, do: File myFile = new File("myFileName.txt"); Scanner scanner = new Scanner(myFile); You have to be prepared to handle a FileNotFound exception You can even “read” from a String: Scanner scanner = new Scanner(myString); This can be handy for parsing a string Using the Scanner First, you should make sure there is something to scan scanner.hasNext() boolean You wouldn’t use this when reading from the keyboard You can read a line at a time Or, you can read one “token” at a time A token is any sequence of nonwhitespace characters scanner.next () String You must be prepared to deal with exceptions scanner.nextLine() String Eclipse will tell you what you need to do nextLine and next return Strings, which you can convert to numbers or other types if you like There are also methods to check for and return primitives directly Scanning for primitives You can read in and convert text to primitives: boolean b = sc.nextBoolean(); byte by = sc.nextByte(); short sh = sc.nextShort(); int i = sc.nextInt(); long l = sc.nextLong(); float f = sc.nextFloat(); double d = sc.nextDouble(); And test if you have something to read: hasNextBoolean() hasNextByte() hasNextShort() hasNextInt() hasNextLong() hasNextFloat() hasNextDouble() Formatted output Java 5 has a printf method, similar to that of C Each format code is % width code Some format codes are s for strings, d for integers, f for floating point numbers Example: double pi = Math.PI; System.out.printf("%8s %-8s %6d %-6d %8f %-8.2f :) \n", "abc", "def", 123, 456, pi, pi); System.out.printf("%8s %-8s %6d %-6d", "abcdef", "ghijkl", 12345, 6789); Output: abc def abcdef ghijkl 123 456 12345 6789 3.141593 3.14 :) Simple Java I/O Part V Serialization 4-May-17 Serialization You can also read and write objects to files Object I/O goes by the awkward name of serialization Serialization in other languages can be very difficult, because objects may contain references to other objects Java makes serialization (almost) easy 21 Conditions for serializability If an object is to be serialized: The class must be declared as public The class must implement Serializable The class must have a no-argument constructor All fields of the class must be serializable: either primitive types or serializable objects 22 Implementing Serializable To “implement” an interface means to define all the methods declared by that interface, but... The Serializable interface does not define any methods! Question: What possible use is there for an interface that does not declare any methods? Answer: Serializable is used as flag to tell Java it needs to do extra work with this class 23 Simple Java I/O Part III JFileChoosers 4-May-17 About JFileChoosers The JFileChooser class displays a window from which the user can select a file The dialog window is modal--the application cannot continue until it is closed Applets cannot use a JFileChooser, because applets cannot access files 25 Typical JFileChooser window 26 JFileChooser constructors JFileChooser() JFileChooser(File currentDirectory) Creates a JFileChooser starting from the user’s directory Constructs a JFileChooser using the given File as the path JFileChooser(String currentDirectoryPath) Constructs a JFileChooser using the given path 27 Useful JFileChooser methods I int showOpenDialog(Component enclosingJFrame); int showSaveDialog(Component enclosingJFrame); Asks for a file to read; returns a flag (see below) Asks where to save a file; returns a flag (see below) Returned flag value may be: JFileChooser.APPROVE_OPTION JFileChooser.CANCEL_OPTION JFileChooser.ERROR_OPTION 28 Useful JFileChooser methods II File getSelectedFile() showOpenDialog and showSaveDialog return a flag telling what happened, but don’t return the selected file After we return from one of these methods, we have to ask the JFileChooser what file was selected If we are saving a file, the File may not actually exist yet— that’s OK, we still have a File object we can use 29 Using a File Assuming that we have successfully selected a File: File file = chooser.getSelectedFile(); if (file != null) { String fileName = file.getCanonicalPath(); FileReader fileReader = new FileReader(fileName); BufferedReader reader = new BufferedReader(fileReader); } File file = chooser.getSelectedFile(); if (file != null) { String fileName = file.getCanonicalPath(); FileOutputStream stream = new FileOutputStream(fileName); writer = new PrintWriter(stream, true); } 30 The End “There is no reason anyone would want a computer in their home.” --Ken Olson, President/founder of Digital Equipment Corp., 1977 “I think there is a world market for maybe five computers.” --Thomas Watson Chairman of IBM,| 1943 31