Presentation is loading. Please wait.

Presentation is loading. Please wait.

CIS 1068 Program Design and Abstraction

Similar presentations


Presentation on theme: "CIS 1068 Program Design and Abstraction"— Presentation transcript:

1 CIS 1068 Program Design and Abstraction
Zhen Jiang CIS Dept. Temple University 1050 Wachman Hall, Main Campus 4/15/2017

2 Table of Contents Introduction to data storage File
Trial of storing data to a text file Exceptions Reading data from a text file Appending to a text file Reading a file name from keyboard Reading a file name from GUI Binary file (related work) Summary and acknowledgement 4/15/2017

3 Storage Modern computers have many different kinds of storage components: - memory (aka RAM or DRAM) - disks (aka “hard disks” or “hard drives”) - caches - external media (USB sticks, DVD, CD-RW, etc.) Why so many? Because they behave differently! 4/15/2017

4 Tradeoff: Disks have greater capacity (more GB) and offer permanent storage; Memory is much faster. Typical Properties Memory Disk Capacity: 1-4 Gb >100 Gb When power goes off: Data is lost Data is safe When program ends: Sequential access speed: 1.2 GB / second 50 MB / second Random access speed: ?? ~ 66.7 seeks / second 4/15/2017

5 File Files are similar abstractions, but for the disk:
They have names and a location on the disk You can put (lots of) data inside them You can later retrieve that data and use it 4/15/2017

6 Two tricky details to these operations –
Read Move data from a file on the disk into a variable (or variables) in memory Write Move data from a variable (or variables) in memory to a file on the disk Two tricky details to these operations – Data types Checked Exceptions 4/15/2017

7 Storing data to text files
Creating a stream variable for a file, general syntax: PrintWriter <name> = new PrintWriter (<file name>); The PrintWriter class is in the java.io package. To use it, include the import declaration: import java.io.*; This PrintWriter object let you print data to a destination file in the current folder (directory). 4/15/2017

8 4/15/2017

9 The program does not compile: The compiler reports:
TextFileOutputTry.java:11: error: unreported exception FileNotFoundException; must be caught or declared to be thrown PrintWriter outputStream = new PrintWriter(fileName); ^ 1 error 4/15/2017

10 Exceptions exception: An object representing a program error.
Programs with invalid logic will cause ("throw") exceptions. Examples: Trying to read a file that does not exist. Dividing by 0. Using charAt(10) on a string of length 5. 4/15/2017

11 checked exception: An exception that must be explicitly handled (otherwise the program will not compile). We must either: handle ("catch") the exception, or explicitly state that we choose not to handle the exception (and accept that the program will crash if the exception occurs)‏ 4/15/2017

12 throws clause, general syntax:
throws clause: Tells the compiler that a method may throw an exception. Like a waiver of liability: "I hereby agree that this method might throw an exception, and I accept the consequences (crashing) if this happens." throws clause, general syntax: public static <type> <name>(<params>) throws <type> { Example: public static void main(String[] args)‏ throws FileNotFoundException { 4/15/2017

13 http://www.cis.temple.edu/~jiang/TextFileOutputDemo.pdf Page 732
4/15/2017

14 Your program should close what it has opened!
Use the close() method to close a file after your done with it. Example: PrintWriter out = new PrintWriter(“output.txt”); out.println(“Hello, output file!”); out.close(); Also works on Scanner objects close() releases system resources associated with an open file. 4/15/2017

15 Reading data from text files
Creating a Scanner for a file, general syntax: Scanner <name> = new Scanner(new File("<file name>")); Example: Scanner input = new Scanner(new File("numbers.txt")); Instead of getting data from the keyboard via System.in, this Scanner object gets data from the file numbers.txt in the current folder (directory). 4/15/2017

16 The preceding program is assumes you know how many values you want to read.
How could we read in ALL of the numbers in the file, without knowing beforehand how many the file contains? 4/15/2017

17 The Scanner has useful methods for testing to see what the next input token will be, see P740.
whether the next token can be interpreted as type int hasNextInt()‏ whether any more lines remain hasNextLine()‏ whether the next token can be interpreted as type double hasNextDouble()‏ whether any more tokens remain hasNext()‏ Description Method Name 4/15/2017

18 Figure 2.7, p98

19

20 Each call to next, nextInt, nextDouble, etc
Each call to next, nextInt, nextDouble, etc. advances the cursor to the end of the current token, skipping over any whitespace. Each call consumes the input. input.nextDouble(); 308.2\n \n\n\n \n2.8\n ^ 4/15/2017

21 File: sequential data storage
Page 738 4/15/2017

22 Appending to a text file
PrintWriter outputStream = new PrintWriter (new FileOutputStream (<file name>, true)); For example PrintWriter outputStream = new PrintWriter (new FileOutputStream (“out.txt”, true)); 4/15/2017

23 Reading a file name from keyboard
Page 742. Using path names, p743. New File (“c:\\homework\\hw1\\data.txt”) 4/15/2017

24 Reading a file name from GUI
fileChooser import 4/15/2017

25 Binary file (related materials)
Images, videos, mp3s, oh my! Let’s say we wanted to write a program that makes a copy of an mp3 – Q: What’s wrong with using Scanner and PrintWriter? A: If the file contains no `\n’ characters, the nextLine() method will try to read the entire file into memory all at once! 4/15/2017

26 Setting up an input file, general syntax:
FileInputStream: a class in the java.io package that lets you read binary data in chunks whose size you specify. Setting up an input file, general syntax: FileInputStream <name> = new FileInputStream(new File("<file name>")); Example: FileInputStream input = new FileInputStream(new File(“input.mp3")); int nextByte = input.read(); byte [] buffer = new byte[100]; int numBytesRead = input.read(buffer); 4/15/2017

27 System.out is a PrintStream object!
PrintStream: Another class in the java.io package that lets you print output to a destination such as a file. Writer: text output, Stream: binary output System.out is a PrintStream object! Any methods you have used on System.out (such as print, println) will work on every PrintStream object. 4/15/2017

28 4/15/2017

29 Summary of Concepts Writing, p732 Reading, p94 and p738
Appending text to a file, p736 Reading the file name, p742 – 743, fileChooser 4/15/2017

30 Acknowledgement I would like to thank Dr. Alexander Yates, the coordinator of CIS 1068, for sharing the curriculum materials and providing insightful suggestions. I would also like to thank Dr. Eugene Kwatny for generously supporting this special education practice. 4/15/2017


Download ppt "CIS 1068 Program Design and Abstraction"

Similar presentations


Ads by Google