Otwieranie pliku z dowolnego katalogu -prośba o szybką pomoc

0

Czy ktoś mógłby nam pomóc w poprawieniu projektu? Błąd polega na tym, że plik nie otwiera się z dowolnego katalogu na dysku, a jedynie z tego, w którym mamy nasz program.

Jeżeli widzicie jeszcze jakieś błędy w programie (zwłaszcza jeśli chodzi o zmianę kodowania polskich liter) będziemy wdzięczne za wszelkie poprawki.

Program ma wyglądać tak: http://img505.yfrog.com/i/translator.jpg/

Oto kod programu:

import javax.swing.;
import java.awt.event.
;
import java.awt.;
import java.io.
;

public class Projekt extends JFrame implements ActionListener
{

StringBuffer txt;    

private JFileChooser fc = new JFileChooser(".");

String[] comboTypes = { "Win 1250 -> ISO-8859-2", "Win 1250 -> UTF-8", "ISO-8859-2 -> Win 1250", "UTF-8 -> Win 1250" };
JComboBox cb = new JComboBox(comboTypes);

private JTextArea ta = new JTextArea();
private JTextField jtf1;
private JTextField jtf2;

//------------------------
public static void main(String[] args)
{
    new Projekt();
}

//------------------------
public Projekt()
{
    setTitle("Zmiana sposobu kodowania polskich liter");
    
    JToolBar tb = new JToolBar();
    
	cb.setSelectedIndex(0);
	cb.addActionListener(this);
	cb.setMaximumSize(new Dimension(200, 25));
	tb.add(cb);
	
	tb.addSeparator();
    
    JButton b = new JButton(new ImageIcon("open.gif"));
    b.setActionCommand("Open");
    b.setToolTipText("Otwarcie pliku");
    b.addActionListener(this);
    tb.add(b);
    
    tb.addSeparator();
    
	b = new JButton(new ImageIcon("right.gif"));
	b.setActionCommand("Run");
	b.setToolTipText("Zmiana kodowania");
	b.addActionListener(this);
	tb.add(b);
    
	tb.addSeparator();
	
    b = new JButton(new ImageIcon("save.gif"));
    b.setActionCommand("Save");
    b.setToolTipText("Zapisanie pliku");
    b.addActionListener(this);
    tb.add(b);

    add(tb,BorderLayout.NORTH);
    
    
	JPanel jp = new JPanel ();
	add (jp, BorderLayout.CENTER);
	b = new JButton(new ImageIcon("Translator.JPG"));
	jp.add(b);

    
    tb = new JToolBar();
    tb.setLayout(new GridBagLayout());
    
    GridBagConstraints gBC = new GridBagConstraints();
    gBC.fill = GridBagConstraints.HORIZONTAL;
    gBC.ipadx = 3;
    gBC.ipady = 3;
    gBC.insets = new Insets(3,3,3,3);

    JLabel l1 = new JLabel("Plik wejściowy");
    gBC.weightx = 0.5;
    gBC.gridwidth = 1;
    gBC.gridx = 0;
    gBC.gridy = 0;
    tb.add(l1, gBC);

    jtf1 = new JTextField("nazwa pliku wejściowego");
    gBC.weightx = 0.5;
    gBC.gridwidth = 3;
    gBC.gridx = 1;
    gBC.gridy = 0;
    jtf1.setEditable(false);
    tb.add(jtf1, gBC);
    
    JLabel l2 = new JLabel("Plik wyjściowy");
    gBC.weightx = 0.5;
    gBC.gridwidth = 1;
    gBC.gridx = 0;
    gBC.gridy = 1;
    tb.add(l2, gBC);

    jtf2 = new JTextField("nazwa pliku wyjściowego");
    gBC.weightx = 0.5;
    gBC.gridwidth = 3;
    gBC.gridx = 1;
    gBC.gridy = 1;
    jtf2.setEditable(false);
    tb.add(jtf2, gBC);
	
	add(tb,BorderLayout.SOUTH);
    
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setResizable(false);
    setLocationRelativeTo(null);
    setVisible(true);
}

//------------------------

private String readFromFile(String file)
{
	txt = new StringBuffer();
    try
    {
        BufferedReader in = new BufferedReader(new FileReader(file));
        while (in.ready())
        {
            txt.append(in.readLine()+"\n");
        }
        in.close();
 	}
 	catch(Exception e)
 	{
        JOptionPane.showMessageDialog(this,e.getMessage(),"",JOptionPane.INFORMATION_MESSAGE);
 	}
 	return txt.toString();
}

//------------------------

private void writeToFile(String file)
{
    try
    {
        FileWriter f = new FileWriter(file);
        f.write(ta.getText());
        f.close();
 	}
 	catch(Exception e)
 	{
        JOptionPane.showMessageDialog(this,e.getMessage(),"",JOptionPane.INFORMATION_MESSAGE);
 	}
 	return;
}

//------------------------

public void actionPerformed(ActionEvent ae)
{
	
    if(ae.getActionCommand().equals("Run"))
    {       	
    	StringBuffer txtOld = new StringBuffer();
    	txtOld.append(ta.getText());
    	
    	txt = new StringBuffer();
    	
    	try
    	{
    		switch(cb.getSelectedIndex())
    		{
    			case 0:
    				txt.append(new String(new String(txtOld).getBytes("windows-1250"), "ISO-8859-2"));
    				break;
    			case 1:
    				txt.append(new String(new String(txtOld).getBytes("windows-1250"), "UTF-8"));
    				break;
    			case 2:
    				txt.append(new String(new String(txtOld).getBytes("ISO-8859-2"), "windows-1250"));
    				break;
    			case 3:
    				txt.append(new String(new String(txtOld).getBytes("UTF-8"), "windows-1250"));
    				break;
    		}	
		}
    	catch (UnsupportedEncodingException e)
    	{
			JOptionPane.showMessageDialog(this,""+cb.getSelectedIndex(),"",JOptionPane.INFORMATION_MESSAGE);
			JOptionPane.showMessageDialog(this,e.getMessage(),"",JOptionPane.INFORMATION_MESSAGE);
		}

    	ta.setText(txt.toString());      	
    }
    
    if(ae.getActionCommand().equals("Open"))
    {
        if(fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
        {
        	
            String plik = fc.getName(fc.getSelectedFile());
            ta.setText(readFromFile(plik));
            jtf1.setText(plik);
        }
    }
    
    if(ae.getActionCommand().equals("Save"))
    {
        if(fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
        {
            String plik = fc.getName(fc.getSelectedFile());
            writeToFile(plik);
            jtf2.setText(plik);
        }
    }
    
}

}</image>

0

Korzystanie z dokumentacji nie boli, a ułatwia życie.
Podpowiem, błędem jest użycie metody getName().

0

Aby otrzymac sciezkę pliku zamiast:

String plik = fc.getName(fc.getSelectedFile());

powinienes:

String plik =fc.getSelectedFile().getPath() ;

1 użytkowników online, w tym zalogowanych: 0, gości: 1