Kĩ thuật lập trình - Files and streams
To open a file for reading objects, create a FileInputStream wrapped by an ObjectInputStream
FileInputStream provides methods for reading byte-based input from a file
ObjectInputStream uses FileInputStream to read objects from file
ObjectInputStream method readObject reads in object, which is then downcast to proper type
EOFException occurs if attempt made to read past end of file
ClassNotFoundException occurs if the class for the object being read cannot be located
ObjectInputStream method close closes both objects
82 trang |
Chia sẻ: huyhoang44 | Lượt xem: 727 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Kĩ thuật lập trình - Files and streams, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
14Files and Streams 1I can only assume that a “Do Not File” document is filed in a “Do Not File” file. Senator Frank ChurchSenate Intelligence Subcommittee Hearing, 1975Consciousness does not appear to itself chopped up in bits. A “river” or a “stream” are the metaphors by which it is most naturally described.William JamesI read part of it all the way through.Samuel GoldwynA great memory does not make a philosopher, any more than a dictionary can be called grammar.John Henry, Cardinal Newman2OBJECTIVESIn this chapter you will learn: To create, read, write and update files.To use class File to retrieve information about files and directories.The Java input/output stream class hierarchy.The differences between text files and binary files.Sequential-access and random-access file processing.To use classes Scanner and Formatter to process text files.To use the FileInputStream and FileOutputStream classes.To use a JFileChooser dialog.To use the ObjectInputStream and ObjectOutputStream classes314.1 Introduction 14.2 Data Hierarchy 14.3 Files and Streams 14.4 Class File 14.5 Sequential-Access Text Files 14.5.1 Creating a Sequential-Access Text File 14.5.2 Reading Data from a Sequential-Access Text File 14.5.3 Case Study: A Credit-Inquiry Program 14.5.4 Updating Sequential-Access Files414.6 Object Serialization 14.6.1 Creating a Sequential-Access File Using Object Serialization 14.6.2 Reading and Deserializing Data from a Sequential- Access File 14.7 Additional java.io Classes 14.8 Opening Files with JFileChooser 14.9 Wrap-Up 514.1 IntroductionStorage of data in variables and arrays is temporaryFiles used for long-term retention of large amounts of data, even after the programs that created the data terminatePersistent data – exists beyond the duration of program executionFiles stored on secondary storage devicesStream – ordered data that is read from or written to a file614.2 Data HierarchyComputers process all data items as combinations of zeros and onesBit – smallest data item on a computer, can have values 0 or 1Byte – 8 bitsCharacters – larger data itemConsists of decimal digits, letters and special symbolsCharacter set – set of all characters used to write programs and represent data itemsUnicode – characters composed of two bytesASCII714.2 Data HierarchyFields – a group of characters or bytes that conveys meaningRecord – a group of related fieldsFile – a group of related recordsData items processed by computers form a data hierarchy that becomes larger and more complex from bits to filesRecord key – identifies a record as belonging to a particular person or entity – used for easy retrieval of specific recordsSequential file – file in which records are stored in order by the record-key fieldDatabase – a group of related filesDatabase Management System – a collection of programs designed to create and manage databases8Fig. 14.1 | Data hierarchy. 914.3 Files and StreamsJava views each files as a sequential stream of bytesOperating system provides mechanism to determine end of fileEnd-of-file markerCount of total bytes in fileJava program processing a stream of bytes receives an indication from the operating system when program reaches end of stream1014.3 Files and StreamsFile streamsByte-based streams – stores data in binary formatBinary files – created from byte-based streams, read by a program that converts data to human-readable formatCharacter-based streams – stores data as a sequence of charactersText files – created from character-based streams, can be read by text editorsJava opens file by creating an object and associating a stream with itStandard streams – each stream can be redirectedSystem.in – standard input stream object, can be redirected with method setInSystem.out – standard output stream object, can be redirected with method setOutSystem.err – standard error stream object, can be redirected with method setErr1114.3 Files and Streamsjava.io classesFileInputStream and FileOutputStream – byte-based I/OFileReader and FileWriter – character-based I/OObjectInputStream and ObjectOutputStream – used for input and output of objects or variables of primitive data typesFile – useful for obtaining information about files and directoriesClasses Scanner and FormatterScanner – can be used to easily read data from a fileFormatter – can be used to easily write data to a file12Fig. 14.2 | Java’s view of a file of n bytes. 1314.4 Class FileClass File useful for retrieving information about files and directories from diskObjects of class File do not open files or provide any file-processing capabilities14Creating File ObjectsClass File provides four constructors:Takes String specifying name and path (location of file on disk)Takes two Strings, first specifying path and second specifying name of fileTakes File object specifying path and String specifying name of fileTakes URI object specifying name and location of fileDifferent kinds of pathsAbsolute path – contains all directories, starting with the root directory, that lead to a specific file or directoryRelative path – normally starts from the directory in which the application began executing15Fig. 14.3 | File methods.(Part 1 of 2) 16Fig.14.3 | File methods.(Part 2 of 2)17Error-Prevention Tip 14.1 Use File method isFile to determine whether a File object represents a file (not a directory) before attempting to open the file.18Demonstrating Class FileCommon File methodsexists – return true if file exists where it is specifiedisFile – returns true if File is a file, not a directoryisDirectory – returns true if File is a directorygetPath – return file path as a stringlist – retrieve contents of a directorySeparator character – used to separate directories and files in a pathWindows uses \UNIX uses /Java process both characters, File.pathSeparator can be used to obtain the local computer’s proper separator character19Create new File object; user specifies file name and pathReturns true if file or directory specified existsRetrieve name of file or directoryReturns true if name is a file, not a directoryReturns true if name is a directory, not a fileReturns true if path was an absolute pathRetrieve time file or directory was last modified (system-dependent value)Retrieve length of file in bytesRetrieve path entered as a stringRetrieve absolute path of file or directoryRetrieve parent directory (path where File object’s file or directory can be found)20Returns true if File is a directory, not a fileRetrieve and display contents of directory212223OutlineFileDemonstrationTest.java(3 of 3)24Common Programming Error 14.1 Using \ as a directory separator rather than \\ in a string literal is a logic error. A single \ indicates that the \ followed by the next character represents an escape sequence. Use \\ to insert a \ in a string literal. 2514.5 Sequential-Access Text FilesRecords are stored in order by record-key fieldCan be created as text files or binary files2614.5.1 Creating a Sequential-Access Text FileJava imposes no structure on a file, records do not exist as part of the Java languageProgrammer must structure filesFormatter class can be used to open a text file for writingPass name of file to constructorIf file does not exist, will be createdIf file already exists, contents are truncated (discarded)Use method format to write formatted text to fileUse method close to close the Formatter object (if method not called, OS normally closes file when program exits)2714.5.1 Creating a Sequential-Access Text FilePossible exceptionsSecurityException – occurs when opening file using Formatter object, if user does not have permission to write data to fileFileNotFoundException – occurs when opening file using Formatter object, if file cannot be found and new file cannot be createdNoSuchElementException – occurs when invalid input is read in by a Scanner objectFormatterClosedException – occurs when an attempt is made to write to a file using an already closed Formatter object28293031Used for retrieving input from userUsed for writing data to fileObject used to output data to fileOpen file clients.txt for writing32Create Scanner to retrieve input from userCreate AccountRecord to be filled with user input33Loop while user is entering inputRetrieve input, store data in AccountRecordWrite AccountRecord information to fileFile closed while trying to write to it34Close fileError with input entered by user35Fig.14.8 | End-of-file key combinations for various popular operating systems.363738Fig.14.10 | Sample data for the program in Fig. 14.7. 3914.5.2 Reading Data from a Sequential-Access Text FileData is stored in files so that it may be retrieved for processing when neededScanner object can be used to read data sequentially from a text filePass File object representing file to be read to Scanner constructorFileNotFoundException occurs if file cannot be foundData read from file using same methods as for keyboard input – nextInt, nextDouble, next, etc.IllegalStateException occurs if attempt is made to read from closed Scanner object40Open file clients.txt for reading41Create AccountRecord to store input from fileWhile there is data to be read from fileDisplay AccountRecord contentsRead data from file, store in AccountRecord42Close file434414.5.3 Case Study: A Credit-Inquiry ProgramTo retrieve data sequentially from a file, programs normally start reading from beginning of the file and read all the data consecutively until desired information is foundClass Scanner provides no way to reposition to beginning of fileInstead, file is closed and reopened4546Scanner used to read data from fileAccountRecord stores record being read from file47Open file clients.txt for readingWhile there is data to read from fileRetrieve input, store data in AccountRecordDisplay record data to screenCheck if record is of requested typeClose Scanner48Close fileMethod determines if record is of proper type49Loop until user enters valid requestRetrieve request entered5051Read file, display proper records52535414.5.4 Updating Sequential-Access FilesData in many sequential files cannot be modified without risk of destroying other data in fileOld data cannot be overwritten if new data is not same sizeRecords in sequential-access files are not usually updated in place. Instead, entire file is usually rewritten.5514.6 Object SerializationWith text files, data type information lostObject serialization – mechanism to read or write an entire object from a fileSerialized object – object represented as sequence of bytes, includes object’s data and type information about objectDeserialization – recreate object in memory from data in fileSerialization and deserialization performed with classes ObjectInputStream and ObjectOutputStream, methods readObject and writeObject5614.6.1 Creating a Sequential-Access File Using Object Serialization:Defining the AccountRecordSerializable ClassSerializable interface – programmers must declare a class to implement the Serializable interface, or objects of that class cannot be written to a fileTo open a file for writing objects, create a FileOutputStream wrapped by an ObjectOutputStreamFileOutputStream provides methods for writing byte-based output to a fileObjectOutputStream uses FileOutputStream to write objects to fileObjectOutputStream method writeObject writes object to output fileObjectOutputStream method close closes both objects57Interface Serializable specifies that AccountRecordSerializable objects can be written to file585960Class used to create byte-based output streamClass used to create output object data to byte-based streamOpen file clients.ser for writing6162Create AccountRecord based on user inputWrite record object to file636465Common Programming Error 14.2 It is a logic error to open an existing file for output when, in fact, the user wishes to preserve the file. 6614.6.2 Reading and Deserializing Data from a Sequential-Access FileTo open a file for reading objects, create a FileInputStream wrapped by an ObjectInputStreamFileInputStream provides methods for reading byte-based input from a fileObjectInputStream uses FileInputStream to read objects from fileObjectInputStream method readObject reads in object, which is then downcast to proper typeEOFException occurs if attempt made to read past end of fileClassNotFoundException occurs if the class for the object being read cannot be locatedObjectInputStream method close closes both objects67Class used to create byte-based input streamClass used to read input object data to byte-based streamOpen file clients.ser for reading68Read record from fileOutput record information to screen69Close file707114.7 Additional java.io Classes: Interfaces and Classes for Byte-Based Input and OutputInputStream and OutputStream classesabstract classes that declare methods for performing byte-based input and outputPipedInputStream and PipedOutputStream classesEstablish pipes between two threads in a programPipes are synchronized communication channels between threadsFilterInputStream and FilterOutputStream classesProvides additional functionality to stream, such as aggregating data byte into meaningful primitive-type unitsPrintStream classPerforms text output to a specified streamDataInput and DataOutput interfacesFor reading and writing primitive types to a fileDataInput implemented by classes RandomAccessFile and DataInputStream, DataOutput implemented by RandomAccessFile and DataOuputStreamSequenceInputStream class enables concatenation of several InputStreams – program sees group as one continuous InputStream72Interfaces and Classes for Byte-Based Input and OutputBuffering is an I/O-performance-enhancement techniqueGreatly increases efficiency of an applicationOutput (uses BufferedOutputStream class)Each output statement does not necessarily result in an actual physical transfer of data to the output device – data is directed to a region of memory called a buffer (faster than writing to file)When buffer is full, actual transfer to output device is performed in one large physical output operation (also called logical output operations)Partially filled buffer can be forced out with method flushInput (uses BufferedInputStream class)Many logical chunks of data from a file are read as one physical input operation (also called logical input operation)When buffer is empty, next physical input operation is performedByteArrayInputStream and ByteArrayOutputStream classes used for inputting from byte arrays in memory and outputting to byte arrays in memory73Performance Tip 14.1 Buffered I/O can yield significant performance improvements over unbuffered I/O. 74Interfaces and Classes for Character-Based Input and OutputReader and Writer abstract classesUnicode two-byte, character-based streamsBufferedReader and BufferedWriter classesEnable buffering for character-based streamsCharArrayReader and CharArrayWriter classesRead and write streams of characters to character arraysLineNumberReader classBuffered character stream that keeps track of number of lines readPipedReader and PipedWriter classesImplement piped-character streams that can be used to transfer information between threadsStringReader and StringWriter classesRead characters from and write characters to Strings7514.8 Opening Files with JFileChooserJFileChooser – class used to display a dialog that enables users to easily select filesMethod setFileSelectionMode specifies what user can select from JFileChooserFILES_AND_DIRECTORIES constant indicates files and directoriesFILES_ONLY constant indicates files onlyDIRECTORIES_ONLY constant indicates directories onlyMethod showOpenDialog displays JFileChooser dialog titled Open, with Open and Cancel buttons (to open a file/directory or dismiss the dialog, respectively)CANCEL_OPTION constant specifies that user click Cancel buttonMethod getSelectedFile retrieves file or directory user selected76Class for display JFileChooser dialog77Create JFileChooserAllow user to select both files and directoriesDisplay dialogUser clicked CancelRetrieve file or directory selected by user78Display information about file7980 Select location for file here Files and directories are displayed here Click Open to submit new file name to program8182
Các file đính kèm theo tài liệu này:
- javahtp7e_14_2487_4126.ppt