Skip to content

Lab 5: Text Editor File I/O

Welcome to the Nanovimacs project! We are building a next-generation, terminal-based editor. Our editor will replace nano, vi, emacs, and others. (Just kidding.)

The goal of this lab is to practice file I/O by adding load/save functionality to the following provided files:

  • Document.java
    Represents a plain text file as an ArrayList of strings (i.e., the lines of the file).
  • Editor.java
    An application that provides a command-line interface to the Document class.

You can run the Editor application from the terminal and/or VS Code. You can also run the provided tests:

Refer to the Java API documentation as needed:

Part 1: Document

Download the files above and complete the Document class. The unfinished methods should conform to the Javadoc comments. Test your completed file by running the provided JUnit tests.

Part 2: Editor

The current implementation of the Editor class does not include code for handling exceptions related to file I/O. If you attempt to open a non-existent file, or to write a file to a location where do not have permission, the application will crash.

Modify Editor by removing all throws declarations and adding try/catch blocks to saveFile() and loadFile(). If an exception occurs, these methods should print a helpful error message and then allow execution to proceed normally.

Optional Work

Most text editors allow you to save the current document without having to re-enter the filename. Modify the Editor class to provide this functionality. If the file is already associated with a filename (because of an earlier save or load), then the "s" command should now save the current version without prompting for a filename. You should also add a save-as command to allow specifying a filename even if one already exists. Use "w" to represent save-as. Make sure to update the help message to conform to the new functionality.

Submission

Submit Document.java and Editor.java to Gradescope. Do not submit the test files. Points will be allocated as follows:

Criterion Points Details
Compile 0 pts Success Required
CompileOfficialTests 0 pts Success Required
Style 0 pts Success Required
OfficialTests 10 pts Partial Credit Possible