Files. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

Similar documents
Files. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

Files & Exception Handling. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

CSE 1223: Introduction to Computer Programming in Java Chapter 7 File I/O

File Input and Output Review CSC 123 Fall 2018 Howard Rosenthal

Final Exam. CSC 121 Fall Lecturer: Howard Rosenthal. Dec. 13, 2017

Wentworth Institute of Technology. Engineering & Technology WIT COMP1000. File Input and Output

Arrays and Array Lists. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos and Alexandra Stefan University of Texas at Arlington

Chapter 4: Loops and Files

First Programs. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

Final Exam. CSC 121 Fall Lecturer: Howard Rosenthal. Dec. 13, 2017

First Programs. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

Warm up question. 2)Which of the following operators are defined on a half integer? Which of the following would it be useful to write as behaviors?

First Programs. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

CSCI 1103: File I/O, Scanner, PrintWriter

Files. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

Methods (Functions) CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

Lecture 05 I/O statements Printf, Scanf Simple statements, Compound statements

CS 152: Data Structures with Java Hello World with the IntelliJ IDE

Chapter 4: Loops and Files

Mandatory Assignment 1, INF 4130, 2017

Java Coding 3. Over & over again!

2.8. Decision Making: Equality and Relational Operators

Dec. 16/ Deciding Which Loop to Use

Input-Output and Exception Handling

Assignment 17 Deadline: Oct pm COSC211 CRN15376 Session 14 (Oct. 29)

Advanced Java Concept Unit 1. Mostly Review

Object-Oriented Programming in Java

CSCI 136 Written Exam #0 Fundamentals of Computer Science II Spring 2015

Common Mistakes with Functions. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

Introduction to Programming in C Department of Computer Science and Engineering. Lecture No. #43. Multidimensional Arrays

COMP-202: Foundations of Programming. Lecture 8: for Loops, Nested Loops and Arrays Jackie Cheung, Winter 2016

CSCI 1103: File I/O, Scanner, PrintWriter

COMP-202: Foundations of Programming. Lecture 4: Flow Control Loops Sandeep Manjanna, Summer 2015

Math Modeling in Java: An S-I Compartment Model

CSCI 136 Written Exam #1 Fundamentals of Computer Science II Spring 2014

Decisions (If Statements) And Boolean Expressions

CS 302: Introduction to Programming in Java. Lectures 17&18. It s insanely hot. People desperately need some snowflakes

CS 251, Intermediate Programming Midterm Exam October 9, 2013

Formatted Output (printf) CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

When we reach the line "z = x / y" the program crashes with the message:

CSIS 10A Assignment 4 SOLUTIONS

CS 161: Object Oriented Problem Solving

4. Java Project Design, Input Methods

16-Dec-10. Collections & Data Structures ABSTRACTION VS. IMPLEMENTATION. Abstraction vs. Implementation

COMP 202 File Access. CONTENTS: I/O streams Reading and writing text files. COMP 202 File Access 1

ICOM 4015-Advanced Programming. Spring Instructor: Dr. Amir H. Chinaei. TAs: Hector Franqui, Jose Garcia, and Antonio Tapia. Reference: Big Java

Streams and File I/O

CSCI 161 Introduction to Computer Science

Midterm Exam 2 CS 455, Fall 2013

COMP Streams and File I/O. Yi Hong June 10, 2015

Programming II (CS300)

CS 1301 Ch 8, Handout 3

Example Program. public class ComputeArea {

COMP-202 More Complex OOP

Adam Blank Lecture 2 Winter 2019 CS 2. Introduction to Programming Methods

CS159 Midterm #1 Review

Project #1 rev 2 Computer Science 2334 Fall 2013 This project is individual work. Each student must complete this assignment independently.

Programming II (CS300)

COMP-202: Foundations of Programming. Lecture 2: Variables, and Data Types Sandeep Manjanna, Summer 2015

CS163/164 Final Exam Study Session

CSE Fall 2015 Section 002 Exam 2, Time: 80 mins

CSE 303: Concepts and Tools for Software Development

CS 455 Midterm 2 Spring 2018 [Bono] Apr. 3, 2018

Please answer the following questions. Do not re-code the enclosed codes if you have already completed them.

This Week s Agenda (Part A) CS121: Computer Programming I. The Games People Play. Data Types & Structures. The Array in Java.

Survey #2. Teen Talk Barbie TM Reloaded. University of British Columbia CPSC 111, Intro to Computation Alan J. Hu Partially Filled Arrays ArrayLists

Chapter 7: Arrays CS 121. April 9, Department of Computer Science College of Engineering Boise State University. Chapter 7: Arrays CS / 41

CS 116. Lab Assignment # 1 1

The NetBeans IDE is a big file --- a minimum of around 30 MB. After you have downloaded the file, simply execute the file to install the software.

Binary and Hexadecimal Numbers. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

CS 161: Object Oriented Problem Solving

Strings. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

Object Oriented Programming. Java-Lecture 6 - Arrays

Introduction to Programming in C Department of Computer Science and Engineering. Lecture No. #29 Arrays in C

Array Lists. CSE 1310 Introduction to Computers and Programming University of Texas at Arlington. Last modified: 4/17/18

School of Computer Science CPS109 Course Notes 5 Alexander Ferworn Updated Fall 15

CS 455 Final Exam Spring 2018 [Bono] May 8, 2018

Lecture 9. Assignment. Logical Operations. Logical Operations - Motivation 2/8/18

CS/IT 114 Introduction to Java, Part 1 FALL 2016 CLASS 3: SEP. 13TH INSTRUCTOR: JIAYIN WANG

COMP 110 Project 1 Programming Project Warm-Up Exercise

CONTENTS: What Is Programming? How a Computer Works Programming Languages Java Basics. COMP-202 Unit 1: Introduction

Simple Java Input/Output

CS 161: Object Oriented Problem Solving

Lecture 02, Fall 2018 Friday September 7

Project 1 Computer Science 2334 Spring 2016 This project is individual work. Each student must complete this assignment independently.

Tips from the experts: How to waste a lot of time on this assignment

Object Oriented Programming and Design in Java. Session 2 Instructor: Bert Huang

Module 10A Lecture - 20 What is a function? Why use functions Example: power (base, n)

Introduction to Programming in C Department of Computer Science and Engineering. Lecture No. #47. File Handling

CSE 1223: Exam II Autumn 2016

CS 302: Introduction to Programming

Introduction to Java Applications

Project 1. Java Data types and input/output 1/17/2014. Primitive data types (2) Primitive data types in Java

Computer Hardware. Java Software Solutions Lewis & Loftus. Key Hardware Components 12/17/2013

File I/O Array Basics For-each loop

Maximization and Minimization Problems. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington

Chapter 6 Arrays. Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved.

Pace University. Fundamental Concepts of CS121 1

Introduction to Programming in C Department of Computer Science and Engineering. Lecture No. #44. Multidimensional Array and pointers

I/O STREAM (REQUIRED IN THE FINAL)

Transcription:

Files CSE 1310 Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington 1

Files and Text Files A file is a collection of data, that is saved on a hard drive. A text file contains text (as opposed to images, video, songs, etc.) Every file is uniquely identified using two attributes: The file name. The file path. 2

What You Should Know You are expected to know: How to create a text file. How to edit a text file, to put there the text that you want. How to store a text file in the folder that you want. How to figure out the path of the folder where a file is stored. If you do not know how to do these things, talk to the instructor or the TA. 3

Making Files Visible to Netbeans From Netbeans: Click on File->Project Properties. At the top, see where the project folder is. In order for your Java code to see a text file, you should put the text file on the project folder. IF YOU DO NOT FOLLOW THESE STEPS, YOUR FILE-RELATED PROGRAMS WILL NOT WORK. 4

Folder where your project is saved: 5

Motivation for Files: Phonebook Consider a phonebook application, that allows: Making a new entry (new name and phone number). Modifying an existing entry. Deleting an entry. Looking up the phone given the name. Looking up the name given the phone. What can we do and what can we not do, using what we have learned so far? 6

Motivation for Files: Phonebook Consider a phonebook application, that allows: Making a new entry (new name and phone number). Modifying an existing entry. Deleting an entry. Looking up the phone given the name. Looking up the name given the phone. We can do all five things listed above. However, at the end of the program, all information vanishes. Files provides a solution: data can be saved into files before the program exits. data can be read again from those files when needed. 7

Motivation for Files: Spreadsheets Spreadsheets are one of the most important computer applications. Spreadsheets organize data in tables, consisting of rows and columns. 8

Spreadsheet Example: Class Enrollments Date 1310-006 4308-001 5360-001 7/14/2015 33 41 21 7/17/2015 41 41 20 7/24/2015 50 42 18 7/29/2015 57 41 19 8/2/2015 58 41 18 8/5/2015 67 41 19 8/7/2015 72 41 17 An enrollment spreadsheet shows how many students are enrolled each day in each course section. Such a spreadsheet typically includes tens of rows (dates) and hundreds of columns (courses). 9

Spreadsheet Example: Class Enrollments Date,1310-006,4308-001,5360-001 7/14/2015,33,41,21 7/17/2015,41,41,20 7/24/2015,50,42,18 7/29/2015,57,41,19 8/2/2015,58,41,18 8/5/2015,67,41,19 8/7/2015,72,41,17 Here is the table from the previous slide, saved as a text file. This is a CSV file. CSV stands for "comma-separated values". Such files are really easy to read by computer programs. You will soon write such programs. 10

Motivation for Files: Large Text Processing Suppose that we have to write a program that: takes a book (or a set of books) as an input. identifies the most frequent words in that book or set of books. Can you think of example applications for such a program? 11

Motivation for Files: Large Text Processing Suppose that we have to write a program that: takes a book (or a set of books) as an input. identifies the most frequent words in that book or set of books. Can you think of example applications for such a program? identifying the most important words to learn in a foreign language. identifying the language in which a book was written. identifying and comparing style of different authors, newspapers, centuries, etc. 12

Motivation for Files: E-mails, Web Pages E-mails and web pages are stored as files. Programs are needed to: Create such files, and store data appropriately. Read such files, and present data to the user. 13

Motivation for Files: Images, Video, Songs This is beyond the scope of this course, but: Photographs, movies, songs, are all stored in files. Programs are needed to read such files and interpret the data: Display photos. Play movies. Play songs. Programs are also needed to create such files (store images, video, songs in files). 14

File Format Date,1310-006,4308-001,5360-001 7/14/2015,33,41,21 7/17/2015,41,41,20 7/24/2015,50,42,18 7/29/2015,57,41,19 8/2/2015,58,41,18 8/5/2015,67,41,19 8/7/2015,72,41,17 The file format specifies how to interpret the data. In some cases, we need to know the format in advance, in order to to understand how to process the data. In the above example (from the enrollments spreadsheet), the CSV format is followed. 15

File Format Date,1310-006,4308-001,5360-001 7/14/2015,33,41,21 7/17/2015,41,41,20 7/24/2015,50,42,18 7/29/2015,57,41,19 8/2/2015,58,41,18 8/5/2015,67,41,19 8/7/2015,72,41,17 Date_1310-006_4308-001_5360-001 7/14/2015_33_41_21 7/17/2015_41_41_20 7/24/2015_50_42_18 7/29/2015_57_41_19 8/2/2015_58_41_18 8/5/2015_67_41_19 8/7/2015_72_41_17 On the right, we see the same data stored in another format (columns separated by _, i.e., the underscore character). We need to know the format in advance, in order to to understand how to process the data shown above. 16

First Example This is our first example of a program reading a file. Not much processing of data happens here. The code simply reads lines of text and prints them. Note that you need to import java.io.file. import java.util.scanner; import java.io.file; public class enrollments public static void print_file(string filename) File temp = new File(filename); Scanner input_file; try input_file = new Scanner(temp); catch (Exception e) System.out.printf("Failed to open file %s\n", filename); return; while(input_file.hasnextline()) String line = input_file.nextline(); System.out.printf("%s\n", line); input_file.close(); public static void main(string[] args) print_file("enrollments.csv"); 17

Steps in Reading a File First step: opening a file. Two substeps: Create a File object. Create a Scanner object. We have been using scanner objects for user input. Scanner objects created as shown can be used to read data from files. import java.util.scanner; import java.io.file; public class enrollments public static void print_file(string filename) File temp = new File(filename); Scanner input_file; try input_file = new Scanner(temp); catch (Exception e) System.out.printf("Failed to open file %s\n", filename); return; while(input_file.hasnextline()) String line = input_file.nextline(); System.out.printf("%s\n", line); input_file.close(); public static void main(string[] args) print_file("enrollments.csv"); 18

Steps in Reading a File Creating the scanner object for a file has to be fine using try... catch. Why? import java.util.scanner; import java.io.file; public class enrollments public static void print_file(string filename) File temp = new File(filename); Scanner input_file; try input_file = new Scanner(temp); catch (Exception e) System.out.printf("Failed to open file %s\n", filename); return; while(input_file.hasnextline()) String line = input_file.nextline(); System.out.printf("%s\n", line); input_file.close(); public static void main(string[] args) print_file("enrollments.csv"); 19

Steps in Reading a File Creating the scanner object for a file has to be fine using try... catch. Why? Because something could go wrong, and the program would crash. For example, the filename could be wrong. import java.util.scanner; import java.io.file; public class enrollments public static void print_file(string filename) File temp = new File(filename); Scanner input_file; try input_file = new Scanner(temp); catch (Exception e) System.out.printf("Failed to open file %s\n", filename); return; while(input_file.hasnextline()) String line = input_file.nextline(); System.out.printf("%s\n", line); input_file.close(); public static void main(string[] args) print_file("enrollments.csv"); 20

Steps in Reading a File Second step: reading the data. There are a lot of ways to do this. However, to simplify, we will only use two methods: hasnextline(): check if there is more data to read. nextline(): read the next line of data. import java.util.scanner; import java.io.file; public class enrollments public static void print_file(string filename) File temp = new File(filename); Scanner input_file; try input_file = new Scanner(temp); catch (Exception e) System.out.printf("Failed to open file %s\n", filename); return; while(input_file.hasnextline()) String line = input_file.nextline(); System.out.printf("%s\n", line); input_file.close(); public static void main(string[] args) print_file("enrollments.csv"); 21

Steps in Reading a File Second step: reading the data. Notice that we read the data using a while loop. hasnextline() will return false when there are no more lines to read from the file. import java.util.scanner; import java.io.file; public class enrollments public static void print_file(string filename) File temp = new File(filename); Scanner input_file; try input_file = new Scanner(temp); catch (Exception e) System.out.printf("Failed to open file %s\n", filename); return; while(input_file.hasnextline()) String line = input_file.nextline(); System.out.printf("%s\n", line); input_file.close(); public static void main(string[] args) print_file("enrollments.csv"); 22

Steps in Reading a File Third step: process the data. This task depends on what you want to do. In this simple example, we just print the data. import java.util.scanner; import java.io.file; public class enrollments public static void print_file(string filename) File temp = new File(filename); Scanner input_file; try input_file = new Scanner(temp); catch (Exception e) System.out.printf("Failed to open file %s\n", filename); return; while(input_file.hasnextline()) String line = input_file.nextline(); System.out.printf("%s\n", line); input_file.close(); public static void main(string[] args) print_file("enrollments.csv"); 23

Steps in Reading a File Fourth step: close the file. Use the close() method. import java.util.scanner; import java.io.file; public class enrollments public static void print_file(string filename) File temp = new File(filename); Scanner input_file; try input_file = new Scanner(temp); catch (Exception e) System.out.printf("Failed to open file %s\n", filename); return; while(input_file.hasnextline()) String line = input_file.nextline(); System.out.printf("%s\n", line); input_file.close(); public static void main(string[] args) print_file("enrollments.csv"); 24

Reading a File: Summary First step: open the file. Make sure you know how to create a File object. Make sure you know how to create a Scanner object from a File object. Second step: read the data. Make sure you know how to use hasnextline() and nextline(). Third step: process the data. This is task-dependent, you do whatever is needed. Fourth step: close the file. Make sure you know how to use the close() method. 25

Storing File Contents in a Variable Many times we need to store the data of the entire file in a variable, to do more processing. For example, to edit a spreadsheet. We can store the data from the entire file in an array list of strings. A string for each line of text in the file. Why an array list and not an array? 26

Storing File Contents in a Variable Many times we need to store the data of the entire file in a variable, to do more processing. For example, to edit a spreadsheet. We can store the data from the entire file in an array list of strings. A string for each line of text in the file. Why an array list and not an array? First, because we don't know from the beginning how many lines the file has. Second, because this way we can insert more lines if we want (for example, to add data to a spreadsheet). 27

Storing File Contents in a Variable Many times we need to store the data of the entire file in a variable, to do more processing. For example, to edit a spreadsheet. We can store the data from the entire file in an array list of strings. A string for each line of text in the file. Let's write a function read_file that: Takes as input a filename. Returns an array list of all the lines of text on the file. 28

public static ArrayList<String> read_file(string filename) File temp = new File(filename); Scanner input_file; try input_file = new Scanner(temp); catch (Exception e) System.out.printf("Failed to open file %s\n", filename); return null; ArrayList<String> result = new ArrayList<String>(); while(input_file.hasnextline()) String line = input_file.nextline(); result.add(line); input_file.close(); return result; The solution is almost identical to our print_file function. The new lines are shown in red. 29

Using the read_file Function Let's rewrite function file_print, so that it uses the read_file function that we just wrote. public static void print_file(string filename) ArrayList<String> lines = read_file(filename); if (lines == null) return; for (int i = 0; i < lines.size(); i++) String line = lines.get(i); System.out.printf("%s\n", line); 30

A Second Example: Length of a File Let's write a function file_length that: Takes as input a filename. Returns the number of characters in that file. Hint: use the read_file function that we already have. 31

A Second Example: Length of a File public static int file_length(string filename) ArrayList<String> lines = read_file(filename); if (lines == null) return 0; int length = 0; for (int i = 0; i < lines.size(); i++) String line = lines.get(i); length += line.length(); return length; 32

A Third Example: Counting Words Let's write a function count_words that: Takes as input a filename. Returns the number of words in that file. Question: how can we count the number of words in a string of text? 33

A Third Example: Counting Words Let's write a function count_words that: Takes as input a filename. Returns the number of words in that file. Question: how can we count the number of words in a string of text? Words are typically separated by space. However, they could also be separated by commas, periods, and other punctuation. The String.split method can be used to split text into words. 34

The split Method The split method separates a string into an array of "words" (smaller strings). Argument: a string specifying the characters that separate the words. public class example public static void main(string[] args) String text = "Today is a hot summer day."; String[] words = text.split(" "); for (int i = 0; i < words.length; i++) System.out.printf("word[%d] = %s\n", i, words[i]); Output: words[0] = Today words[1] = is words[2] = a words[3] = hot words[4] = summer words[5] = day. 35

The split Method You can specify multiple characters that separate words, as seen in this example. In the example below, we say that words are separated by comma, space, and dash. Important: to specify multiple characters, you must enclose them in square brackets: []. public class example public static void main(string[] args) String text = "Let's count: One,two,three."; String[] words = text.split("[, -]"); for (int i = 0; i < words.length; i++) System.out.printf("word[%d] = %s\n", i, words[i]); Output: word[0] = Let's word[1] = count: word[2] = One word[3] = two word[4] = three. 36

The split Method You can specify multiple characters that separate words, as seen in this example. In the example below, we say that words are separated by comma, space, and dash. Important: to specify multiple characters, you must enclose them in square brackets: [] (see the example argument: "[, -]"). public class example public static void main(string[] args) String text = "Let's count: One,two,three."; String[] words = text.split("[, -]"); for (int i = 0; i < words.length; i++) System.out.printf("word[%d] = %s\n", i, words[i]); Output: word[0] = Let's word[1] = count: word[2] = One word[3] = two word[4] = three. 37

A Third Example: Counting Words public static int count_words(string filename) ArrayList<String> lines = read_file(filename); if (lines == null) return 0; int counter = 0; for (int i = 0; i < lines.size(); i++) String line = lines.get(i); String[] words = line.split("[,.- ]"); counter += words.length; return counter; Here we specify that words are separated by commas, periods, dashes, spaces. 38

Writing Data to a File We saw that, to read from a file, we associate a file with a Scanner object. Then, we read from a file exactly as we read user input. To write to a file, we associate a file with a PrintWriter object. Then, we print to the file exactly as we print user input. We can use printf, println, and so on. 39

Writing Data to a File import java.io.printwriter; Step 1: Make sure you import java.io.printwriter. public class file_writing_example public static void main(string[] args) String filename = "out1.txt"; PrintWriter out = null; try out = new PrintWriter(filename); catch (Exception e) System.out.printf("Error: failed to open file %s.\n", filename); System.exit(0); out.printf("writing a line to a file.\n"); out.printf("writing a second line.\n"); out.close(); System.out.printf("Done writing to file %s.\n", filename); 40

Writing Data to a File import java.io.printwriter; public class file_writing_example public static void main(string[] args) String filename = "out1.txt"; PrintWriter out = null; try out = new PrintWriter(filename); catch (Exception e) Step 2: Initialize PrintWriter object to null (so that we can associate it with a file using try catch). System.out.printf("Error: failed to open file %s.\n", filename); System.exit(0); out.printf("writing a line to a file.\n"); out.printf("writing a second line.\n"); out.close(); System.out.printf("Done writing to file %s.\n", filename); 41

Writing Data to a File import java.io.printwriter; public class file_writing_example public static void main(string[] args) String filename = "out1.txt"; PrintWriter out = null; try out = new PrintWriter(filename); catch (Exception e) Step 3: Associate the PrintWriter object with a file. We need to use try catch, to catch the case where for some reason the file could not be opened (invalid filename, read-only file, etc). System.out.printf("Error: failed to open file %s.\n", filename); System.exit(0); out.printf("writing a line to a file.\n"); out.printf("writing a second line.\n"); out.close(); System.out.printf("Done writing to file %s.\n", filename); 42

Writing Data to a File import java.io.printwriter; public class file_writing_example public static void main(string[] args) String filename = "out1.txt"; PrintWriter out = null; try out = new PrintWriter(filename); catch (Exception e) Step 4: Write whatever data you want. Note that we use out.printf, and NOT System.out.printf (which would just print to the screen). System.out.printf("Error: failed to open file %s.\n", filename); System.exit(0); out.printf("writing a line to a file.\n"); out.printf("writing a second line.\n"); out.close(); System.out.printf("Done writing to file %s.\n", filename); 43

Writing Data to a File import java.io.printwriter; Step 5: close the file. public class file_writing_example public static void main(string[] args) String filename = "out1.txt"; PrintWriter out = null; try out = new PrintWriter(filename); catch (Exception e) If you forget this step, some or all your data may not be saved in the file. System.out.printf("Error: failed to open file %s.\n", filename); System.exit(0); out.printf("writing a line to a file.\n"); out.printf("writing a second line.\n"); out.close(); System.out.printf("Done writing to file %s.\n", filename); 44

Writing Data to a File import java.io.printwriter; public class file_writing_example public static void main(string[] args) String filename = "out1.txt"; PrintWriter out = null; try out = new PrintWriter(filename); catch (Exception e) Question: what happens if your file already contained some data, before you ran this program? System.out.printf("Error: failed to open file %s.\n", filename); System.exit(0); out.printf("writing a line to a file.\n"); out.printf("writing a second line.\n"); out.close(); System.out.printf("Done writing to file %s.\n", filename); 45

Writing Data to a File import java.io.printwriter; public class file_writing_example public static void main(string[] args) String filename = "out1.txt"; PrintWriter out = null; try out = new PrintWriter(filename); catch (Exception e) Question: what happens if your file already contained some data, before you ran this program? Answer: the previous data is lost. System.out.printf("Error: failed to open file %s.\n", filename); System.exit(0); out.printf("writing a line to a file.\n"); out.printf("writing a second line.\n"); out.close(); System.out.printf("Done writing to file %s.\n", filename); 46

Problem Viewing the Output File import java.io.printwriter; public class file_writing_example public static void main(string[] args) String filename = "out1.txt"; PrintWriter out = null; try out = new PrintWriter(filename); catch (Exception e) On Windows, if you open the text file using Notepad, it shows as one long line. System.out.printf("Error: failed to open file %s.\n", filename); System.exit(0); out.printf("writing a line to a file.\n"); out.printf("writing a second line.\n"); out.close(); System.out.printf("Done writing to file %s.\n", filename); 47

Problem Viewing the Output File import java.io.printwriter; public class file_writing_example public static void main(string[] args) String filename = "out1.txt"; PrintWriter out = null; try out = new PrintWriter(filename); catch (Exception e) On Windows, if you open the text file using Notepad, it shows as one long line. To fix this problem, use \r\n instead of \n for a newline. System.out.printf("Error: failed to open file %s.\n", filename); System.exit(0); out.printf("writing a line to a file.\r\n"); out.printf("writing a second line.\r\n"); out.close(); System.out.printf("Done writing to file %s.\n", filename); 48

Writing Data to a File: Recap Step 1: Make sure you import java.io.printwriter. Step 2: Initialize a PrintWriter variable called out to null (so that we can associate it with a file using try catch). Step 3: Associate the PrintWriter variable with a file. We need to use try catch, to catch the case where for some reason the file could not be opened (invalid filename, read-only file, etc). Step 4: Write whatever data you want. Use out.printf, and NOT System.out.printf (which would just print to the screen). Step 5: close the file. If you forget this step, some or all your data may not be saved in the file. 49

Example: Convert to Squares Write a function save_squares(input_name, output_name) that: Reads numbers from a file named input_file that just contains numbers, one per line. Writes to a file named output_file the square of each number that it read from the input file. 50

Example: Convert to Squares Logic: Read the lines from the input file. Open output file. For each line in the input: Convert string to double. Compute the square. Save the square to the output file. Close the output file. 51

public static void save_squares(string input_file, String output_file) ArrayList<String> lines = read_file(input_file); PrintWriter out = null; try out = new PrintWriter(output_file); catch (Exception e) System.out.printf("Error: failed to open %s.\n", output_file); return; for (int i = 0; i < lines.size(); i++) double number; try number = Double.parseDouble(lines.get(i)); catch (Exception e) System.out.printf("Error: %s is not a number.\n", lines.get(i)); return; out.printf("%.2f\r\n", number * number); out.close(); 52

Spreadsheets Date 1310-006 4308-001 5360-001 7/14/2015 33 41 21 7/17/2015 41 41 20 7/24/2015 50 42 18 7/29/2015 57 41 19 8/2/2015 58 41 18 8/5/2015 67 41 19 8/7/2015 72 41 17 A spreadsheet is a table. You can specify a row and a column, and you get back a value. For example, in the above spreadsheet: You specify a row (date) and a column (course). You get back the number of students enrolled in that course on that date. 53

Spreadsheets in CSV Format Date,1310-006,4308-001,5360-001 7/14/2015,33,41,21 7/17/2015,41,41,20 7/24/2015,50,42,18 7/29/2015,57,41,19 8/2/2015,58,41,18 8/5/2015,67,41,19 8/7/2015,72,41,17 Here is the table from the previous slide, saved as a CSV file. CSV stands for "comma-separated values". CSV is an example of a file format. A file format is a convention on how to store data in a file. To write code that reads data from a file, a programmer must always know the format (convention) that is being used. In this class, we will use the CSV format for saving spreadsheets on files. 54

Storing a Spreadsheet in a Variable A spreadsheet is a table. You can specify a row and a column, and you get back a value. When your code reads a spreadsheet, it is convenient to store the entire spreadsheet into a single variable. The spreadsheet is a sequence of rows, and thus can be stored as an array (or array list) of rows. Each row is a sequence of values, and thus can be stored as an array (or array list) those values. Each value is a string. Therefore, what type of variable do we need for storing a spreadsheet? 55

Storing a Spreadsheet in a Variable A spreadsheet is a table. You can specify a row and a column, and you get back a value. When your code reads a spreadsheet, it is convenient to store the entire spreadsheet into a single variable. The spreadsheet is a sequence of rows, and thus can be stored as an array (or array list) of rows. Each row is a sequence of values, and thus can be stored as an array (or array list) those values. Each value is a string. Therefore, what type of variable do we need for storing a spreadsheet? An array (or array list) of arrays (or array lists) of strings. 56

Storing a Spreadsheet in a Variable Therefore, we have a few choices on how to store spreadsheet data in a variable. Our variable can be: An array of arrays of strings. An array of array lists of strings. An array list of arrays of strings. An array list of array lists of strings. 57

Storing a Spreadsheet in a Variable We will implement two of those options. We will write functions that read a spreadsheet and store its data as: An array of arrays of strings. An array list of array lists of strings. 58

Storing a Spreadsheet in a 2D Array If we store a spreadsheet as an array of arrays of strings, the variable looks like this: String[][] data. data[i] corresponds to the i-th line of the spreadsheet. data[i] contains an array of strings. data[i][j] holds the spreadsheet value for row i, column j. Let's write a function read_spreadsheet that: Takes as input a filename. Returns an array of arrays of strings storing all the data in the spreadsheet. 59

Storing a Spreadsheet in a 2D Array public static String[][] read_spreadsheet(string filename) ArrayList<String> lines = read_file(filename); if (lines == null) return null; // The row below creates an array of length "rows", that stores // objects of type String[]. Those objects are initialized to null. String[][] result = new String[lines.size()][]; for (int i = 0; i < lines.size(); i++) String line = lines.get(i); result[i] = line.split(","); return result; 60

Storing a Spreadsheet in a 2D ArrayList If we store a spreadsheet as an array list of array lists of strings, the variable looks like this: ArrayList<ArrayList<String>> data. data.get(i) corresponds to the i-th line of the spreadsheet. data.get(i) is an array list of strings. data.get(i).get(j) holds the spreadsheet value for row i, column j. Let's write a function read_spreadsheet2 that: Takes as input a filename. Returns an array list of array lists of strings storing all the data in the spreadsheet. 61

Storing a Spreadsheet in a 2D ArrayList public static ArrayList<ArrayList<String>> read_spreadsheet2(string filename) ArrayList<String> lines = read_file(filename); if (lines == null) return null; ArrayList<ArrayList<String>> result = new ArrayList(); for (int i = 0; i < lines.size(); i++) String line = lines.get(i); String[] values = line.split(","); ArrayList<String> list = new ArrayList(); for (int j = 0; j < values.length; j++) list.add(values[j]); result.add(list); return result; 62

Example Programs On the lectures web page, you can access two programs that use these read_spreadsheet functions. nba_leaders_2d_array_version.java stores data as a 2D array of strings. nba_leaders_2d_arraylist_version.java stores data as a 2D array list of strings. Both programs have exactly the same functionality: They read a spreadsheet of statistics of about 270 basketball players. Then, the user can specify a column, and the program prints out the player (or multiple players, in case of ties) with the best statistics in that column. 63