I wondered if anyone could help. I am trying to use a FileChooser in java. I have got the dialog box to appear and can select the file, but the box just displays "opening" and the file name. how to I add to the code to make it actually open the text file?

here is my current code:

package org.work;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.*;

public class FileChooser extends JFrame
{

    private JTextArea log;
    private JFileChooser fc = new JFileChooser();

    private String newline = System.getProperty("line.separator");

    public FileChooser()
    {
        super("FileChooserDemo");

        JButton openButton = new JButton("Open", new ImageIcon("images/open.gif")); //Create the open button and add image
        openButton.addActionListener(new OpenListener()); //Adds action listener to the open button

        JButton saveButton = new JButton("Save", new ImageIcon("images/save.gif")); //Create the save button and add image
        saveButton.addActionListener(new SaveListener()); //Adds action listener to the save button

        JPanel buttonPanel = new JPanel(); //Create a panel
        buttonPanel.add(openButton); //Add the open button to the panel
        buttonPanel.add(saveButton); //Add the save button to the panel

        log = new JTextArea(5,20); //Create the text area
        log.setMargin(new Insets(5,5,5,5)); //Set the margins
        JScrollPane logScrollPane = new JScrollPane(log);

        Container contentPane = getContentPane();
        contentPane.add(buttonPanel, BorderLayout.NORTH); //Add the buttons to the panel
        contentPane.add(logScrollPane, BorderLayout.CENTER); //Add the text area to the panel
    }

    private class OpenListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            int returnVal = fc.showOpenDialog(FileChooser.this);

            if (returnVal == JFileChooser.APPROVE_OPTION)
            {
                File file = fc.getSelectedFile();

                log.append("Opening: " + file.getName() + "." + newline); //Display "Opening" and the retrieved file name in the text area
            } else //If not;
            {
                log.append("Open command cancelled by user." + newline); //Display this command in the text area
            }
        }
    }

    private class SaveListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            int returnVal = fc.showSaveDialog(FileChooser.this);

            if (returnVal == JFileChooser.APPROVE_OPTION)
            {
                File file = fc.getSelectedFile();

                log.append("Saving: " + file.getName() + "." + newline); //Display "Saving" and the retrieved file name in the text area
            } else //If not;
            {
                log.append("Save command cancelled by user." + newline); //Display this command in the text area
            }
        }
    }

    public static void main(String s[])
    {
        JFrame frame = new FileChooser();

        frame.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e) {System.exit(0);} //Terminates program
        });

        frame.pack();
        frame.setVisible(true); //Set frame to visible
    }
}

Edited 3 Years Ago by Nick Evan: Fixed formatting

With this code you can read files:

File fileName;
//OR
String fileName;

BufferedReader reader = new BufferedReader(new FileReader(fileName));

String line = reader.readLine();
while (line != null) {
//do whatever you want with the line read.
//perhaps append it to the TextArea.

line = reader.readLine();
}

Is this within the same class? and do you need to import anything else other than these?

import java.io.*;
import java.util.Scanner;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.*;

Once you get the file: File file = fc.getSelectedFile(); use the code to read the file's lines.

File file = fc.getSelectedFile();

BufferedReader reader = new BufferedReader(new FileReader(file));

String line = reader.readLine();
while (line != null) {
//do whatever you want with the line read.
//perhaps append it to the TextArea.

line = reader.readLine();
}
reader.close();

Your imports are fine.

Thank You for your help.

I have tried adding that code, but the reader is not found, as they are all underlined, and say "unhandled exception type IOExpection".

I added in "File fileName;" from your first post, but this didn't make a difference.

The errors are:
Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems:
Unhandled exception type FileNotFoundException
Unhandled exception type IOException
Unhandled exception type IOException
Unhandled exception type IOException

at org.project.FileChooser$OpenListener.actionPerformed(FileChooser.java:54)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

i hope this makes sense. thank you.

thanks for your help. its working now

Did you put BufferedReader in a try-catch block? Do you want an example?

This question has already been answered. Start a new discussion instead.