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

Odpowiedz Nowy wątek
2009-08-04 13:25
ech
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>

Pozostało 580 znaków

2009-08-04 15:59
bogdans_niezalogowan
0

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

Pozostało 580 znaków

2009-08-06 17:05
turek86
0

Aby otrzymac sciezkę pliku zamiast:

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

powinienes:

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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