## CSci 2101 Data Structures: Lab 13

For this lab use File Input/Output programs that we studied in class as samples and use the references to the APIs as needed.

### Problem 1

Create a file `data.txt` that has integers, one per line. The first integer is the number of lines in the rest of the file.
Your task is to write a program that reads data from the file. The first integer is used to create an array to store all the remaining elements. The rest of the program uses a loop to read the remaining integers and store them in the array. Make sure to close the file after you have read all the data.
Print out the array at the end of the program.
For instance, if the file has data
``````
3
-7
9
0
``````
then the program will create the array of 3 elements and store -7, 9, and 0 in the array.

### Problem 2

Write a program that reads data in a similar way as in Problem 1, but only the first line in the file is an integer, the rest of the lines have strings. For instance, your data may be
``````
3
Apples are red...
Are oranges orange?
Bananas are sweet!
``````
In your program you need to read the integer, create an array of strings, read the strings and store them in the array. Note that a string may have more than one word.
At the end of the program print out all the strings and the number of letters in each string.

### Problem 3

Create a file that has some integers in it (one per line). Write a program to read all of these integers (until the end of the file) and to compute their sum. You don't need to store them in an array (and in fact you can't store them in an array since you don't know the length of the array until you have read all the data).

### Problem 4

Modify the program that you wrote for problem 2: after you have read all the strings you need to open a file for writing and output 5 randomly chosen strings into the file. It's OK if the same string gets selected more than once.

### Problem 5

Write a program that asks the user to input the file name (at the standard input), reads the file name, reads the data from that file, and prints it to the standard output. The first problem of Lab 2 has an example of reading data from the standard input. What happens if the file doesn't exist or is not readable? To make a file not readable, type ```chmod a-r file.txt```, replacing file.txt with your file name (you have to type the command in the same directory as the file). To restore the reading permissions, type `chmod a+r file.txt`. Note that this sets the permission so that the file is visible to everyone. If you want it to be visible only to yourself, type ```chmod u+r file.txt```.

### Problem 6

Modify the program so that if the file doesn't exist or cannot be open for reading, the program asks the user to open another file name. The process continues until the user enters a valid name. When debugging this program, keep in mind that it has a loop that's potentially infinite. If you can't stop your program in any other way, you can stop it by typing Ctrl-C.

### Problem 7

Experiment with reading files that are not in your current directory. Recall that UNIX notation for going one level up in the file tree is .., so if I want to read data from a file data.txt which is one level above the current directory, I can create a new file reader like this: `new FileReader("../data.txt")`
Please write in comments the cases that you tried and the results.
This is a lab from CSci 2101 course.

The views and opinions expressed in this page are strictly those of the page author. The contents of this page have not been reviewed or approved by the University of Minnesota.