Сохранение файлов с помощью диалогового окна сохранения JFileChooser - PullRequest
3 голосов
/ 04 марта 2010

У меня есть класс, который открывает файлы с этой частью:

JFileChooser chooser=new JFileChooser();
chooser.setCurrentDirectory(new File("."));
int r = chooser.showOpenDialog(ChatFrame.this);
if (r != JFileChooser.APPROVE_OPTION) return;
try {
    Login.is.sendFile(chooser.getSelectedFile(), Login.username,label_1.getText());
} catch (RemoteException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

тогда я хочу сохранить этот файл в другом файле с:

JFileChooser jfc = new JFileChooser();
int result = jfc.showSaveDialog(this);
if (result == JFileChooser.CANCEL_OPTION)
    return;
File file = jfc.getSelectedFile();
InputStream in;
try {
    in = new FileInputStream(f);

    OutputStream st=new FileOutputStream(jfc.getSelectedFile());
    st.write(in.read());
    st.close();
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

но он создает только пустой файл! что я должен сделать, чтобы решить эту проблему? (Я хочу, чтобы мой класс открывал все виды файлов и сохранял их)

Ответы [ 2 ]

5 голосов
/ 04 марта 2010

вот ваша проблема: in.read () читает только один байт из потока, но вам придется сканировать весь поток, чтобы фактически скопировать файл:

OutputStream st=new FileOutputStream(jfc.getSelectedFile());
byte[] buffer=new byte[1024];
int bytesRead=0;
while ((bytesRead=in.read(buffer))>0){
    st.write(buffer,bytesRead,0);
}
st.flush();
in.close();
st.close();

или с помощником из apache-commons-io :

OutputStream st=new FileOutputStream(jfc.getSelectedFile());
IOUtils.copy(in,st);
in.close();
st.close();
1 голос
/ 04 марта 2010

Вы должны прочитать от in до конца файла. В настоящее время вы выполняете только одно чтение. См. Например: http://www.java -examples.com / read-file-using-fileinputstream

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...