|
| 1. File chooser GUI for reading files | |
| 2. File chooser GUI for writing files |
The code in Table 1 creates a GUI which allows the user to select and display text files.
// FILE CHOOSER APPLICATION
// 14 June 2003
// Frans Coenen
// University of Liverpool
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FileChooser extends JFrame implements ActionListener{
// GUI features
private BufferedReader fileInput;
private JTextArea textArea;
private JButton openButton, readButton;
// Other fields
private File fileName;
private String[] data;
private int numLines;
public FileChooser(String s) {
super(s);
// Content pane
Container container = getContentPane();
container.setBackground(Color.pink);
container.setLayout(new BorderLayout(5,5)); // 5 pixel gaps
// Open button
openButton = new JButton("Open File");
openButton.addActionListener(this);
container.add(openButton,BorderLayout.WEST);
// Read file button
readButton = new JButton("Read File");
readButton.addActionListener(this);
readButton.setEnabled(false);
container.add(readButton,BorderLayout.EAST);
// Text area
textArea = new JTextArea(10, 15);
container.add(new JScrollPane(textArea),BorderLayout.SOUTH);
}
/* ACTION PERFORMED */
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("Open File")) getFileName();
if (event.getActionCommand().equals("Read File")) readFile();
}
/* OPEN THE FILE */
private void getFileName() {
// Display file dialog so user can select file to open
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = fileChooser.showOpenDialog(this);
// If cancel button selected return
if (result == JFileChooser.CANCEL_OPTION) return;
// Obtain selected file
fileName = fileChooser.getSelectedFile();
if (checkFileName()) {
openButton.setEnabled(false);
readButton.setEnabled(true);
}
}
/* READ FILE */
private void readFile() {
// Disable read button
readButton.setEnabled(false);
// Dimension data structure
getNumberOfLines();
data = new String[numLines];
// Read file
readTheFile();
// Output to text area
textArea.setText(data[0] + "\n");
for(int index=1;index < data.length;index++)
textArea.append(data[index] + "\n");
// Rnable open button
openButton.setEnabled(true);
}
/* GET NUMBER OF LINES */
/* Get number of lines in file and prepare data structure. */
private void getNumberOfLines() {
int counter = 0;
// Open the file
openFile();
// Loop through file incrementing counter
try {
String line = fileInput.readLine();
while (line != null) {
counter++;
System.out.println("(" + counter + ") " + line);
line = fileInput.readLine();
}
numLines = counter;
closeFile();
}
catch(IOException ioException) {
JOptionPane.showMessageDialog(this,"Error reading File",
"Error 5: ",JOptionPane.ERROR_MESSAGE);
closeFile();
System.exit(1);
}
}
/* READ FILE */
private void readTheFile() {
// Open the file
openFile();
System.out.println("Read the file");
// Loop through file incrementing counter
try {
for (int index=0;index < data.length;index++) {
data[index] = fileInput.readLine();
System.out.println(data[index]);
}
closeFile();
}
catch(IOException ioException) {
JOptionPane.showMessageDialog(this,"Error reading File",
"Error 5: ",JOptionPane.ERROR_MESSAGE);
closeFile();
System.exit(1);
}
}
/* CHECK FILE NAME */
/* Return flase if selected file is a directory, access is denied or is
not a file name. */
private boolean checkFileName() {
if (fileName.exists()) {
if (fileName.canRead()) {
if (fileName.isFile()) return(true);
else JOptionPane.showMessageDialog(null,
"ERROR 3: File is a directory");
}
else JOptionPane.showMessageDialog(null,
"ERROR 2: Access denied");
}
else JOptionPane.showMessageDialog(null,
"ERROR 1: No such file!");
// Return
return(false);
}
/* ------------------------------------------------------- */
/* */
/* FILE HANDLING UTILITIES */
/* */
/* ------------------------------------------------------- */
/* OPEN FILE */
private void openFile() {
try {
// Open file
FileReader file = new FileReader(fileName);
fileInput = new BufferedReader(file);
}
catch(IOException ioException) {
JOptionPane.showMessageDialog(this,"Error Opening File",
"Error 4: ",JOptionPane.ERROR_MESSAGE);
}
System.out.println("File opened");
}
/* CLOSE FILE */
private void closeFile() {
if (fileInput != null) {
try {
fileInput.close();
}
catch (IOException ioException) {
JOptionPane.showMessageDialog(this,"Error Opening File",
"Error 4: ",JOptionPane.ERROR_MESSAGE);
}
}
System.out.println("File closed");
}
/* ------------------------------------------------------- */
/* */
/* MAIN METHOD */
/* */
/* ------------------------------------------------------- */
/* MAIN METHOD */
public static void main(String[] args) throws IOException {
// Create instance of class FileChooser
FileChooser newFile = new FileChooser("File chooser");
// Make window vissible
newFile.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
newFile.setSize(500,400);
newFile.setVisible(true);
}
}
|
Table 1:Input GUI program
The resulting GUI is shown in Figures 1 and 2. Figure 1 shows the JFileChooser GUI, and Figure 2 the result of "picking" a file.
Figure 1: JFileChooser GUI.
Figure 2: Result of exacuting code presented in Table 1.
The code in Table 2 creates a GUI which allows the user to create a random 2-D array of 16x8 integers and write this to a a file in comma separated format.
// FILE OUTPUT
// Frans Coenne
// Dept Computer Scioence, The University of Liverpool
// 4 August 2003
/* Based on Example given in: Deitel and Deitel (2002),
"Java: How to Program" (4th Ed), Prentice Hall. */
// Java core packages
import java.io.*;
import java.awt.*;
import java.awt.event.*;
// Java extension packages
import javax.swing.*;
public class FileOutput extends JFrame implements ActionListener{
/* ---------- FIELDS --------- */
private JButton saveFile, createFile;
private JTextArea textArea;
private File fileName;
private PrintWriter fileOutput;
int[][] random2Darray = null;
static final int NUM_RECORDS=16;
static final int SIZE_OF_RECORD=8;
/* ---------- CONSTRUCTORS ---------- */
FileOutput(String s) {
super(s);
// Content pane
Container container = getContentPane();
container.setBackground(Color.pink);
container.setLayout(new BorderLayout(5,5)); // 5 pixel gaps
// Save button
saveFile = new JButton("Save File");
saveFile.addActionListener(this);
// Create output button
createFile = new JButton("Create File");
createFile.addActionListener(this);
// Text area
textArea = new JTextArea(40, 15);
textArea.setEditable(false);
container.add(new JScrollPane(textArea),BorderLayout.CENTER);
// Button Panel
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(1,2));
buttonPanel.add(createFile);
buttonPanel.add(saveFile);
container.add(buttonPanel,BorderLayout.NORTH);
}
/* ACTION PERFORMED */
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("Save File")) saveFile();
if (event.getActionCommand().equals("Create File")) createFile();
}
/* ---------------------------------------------------------------- */
/* */
/* CREATE FILE */
/* */
/* ---------------------------------------------------------------- */
private void createFile() {
textArea.append("CREATE FILE\n-----------\n");
random2Darray = new int[NUM_RECORDS][SIZE_OF_RECORD];
for (int index1=0;index1 < NUM_RECORDS;index1++) {
for (int index2=0;index2 < SIZE_OF_RECORD;index2++) {
int value = (int) (Math.random()*100);
textArea.append(value + " ");
random2Darray[index1][index2]=value;
}
textArea.append("\n");
}
// End
textArea.append("\n\n");
}
/* -------------------------------------------------------------- */
/* */
/* SAVE FILE */
/* */
/* -------------------------------------------------------------- */
private void saveFile() {
textArea.append("SAVE FILE\n---------\n");
if (openFile()) {
try {
outputToFile();
}
catch (IOException ioException) {
JOptionPane.showMessageDialog(this,"Error Writing to File",
"Error",JOptionPane.ERROR_MESSAGE);
}
}
}
private void outputToFile() throws IOException {
// Initial output
textArea.append("File name = " + fileName + "\n");
// Test if data exists
if (random2Darray != null) {
// Step through records
for (int index1=0;index1 < NUM_RECORDS;index1++) {
// Write integers in record up to last integer
int index2=0;
for (;index2 < SIZE_OF_RECORD-1;index2++) {
fileOutput.print(random2Darray[index1][index2] + ",");
}
//Write last integer
fileOutput.println(random2Darray[index1][index2]);
}
textArea.append("File output complete\n\n");
}
else textArea.append("No data\n\n");
// End by closing file
fileOutput.close();
}
private boolean openFile () {
// Display file dialog box
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = fileChooser.showOpenDialog(this);
// If cancel button selected return
if (result == JFileChooser.CANCEL_OPTION) return(false);
// Obtain selected file
fileName = fileChooser.getSelectedFile();
// Dispaly error if invalid
if (fileName == null || fileName.getName().equals("")) {
JOptionPane.showMessageDialog(this,"Invalid File name",
"Invalid File nmae",JOptionPane.ERROR_MESSAGE);
return(false);
}
else {
try {
fileOutput = new PrintWriter(new FileWriter(fileName));
return(true);
}
catch(IOException ioException) {
JOptionPane.showMessageDialog(this,"Error opening File",
"Error",JOptionPane.ERROR_MESSAGE);
return(false);
}
}
}
/* ------------------------------------------------------- */
/* */
/* MAIN METHOD */
/* */
/* ------------------------------------------------------- */
/* MAIN METHOD */
public static void main(String[] args) {
FileOutput newFile = new FileOutput("File Output GUI");
// Make window vissible
newFile.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
newFile.setSize(300,500);
newFile.setVisible(true);
}
}
|
Table 2:Output GUI program
The resulting GUIs are shown in Figures 3 and 4. Figure 3 shows the JFileChooser GUI, and Figure 4 the result of "writing" a file.
Figure 3: JFileChooser GUI.
Figure 4: Result of exacuting code presented in Table 2.
|