使用JFileChooser保存文件保存对话框

时间:2010-03-04 17:17:37

标签: java swing

我有一个用这个部分打开文件的类:

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 个答案:

答案 0 :(得分:5)

这是你的问题:in.read()只读取Stream中的一个字节,但你必须扫描整个Stream来实际复​​制文件:

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 :(得分:1)

你必须从in读到文件结尾。目前您只执行一次阅读。例如,请参阅:http://www.java-examples.com/read-file-using-fileinputstream