【发布时间】:2014-11-14 12:10:47
【问题描述】:
好的,我不确定为什么这不起作用,但我正在尝试使用 JFileChooser 选择源文件(C、C++、Java),然后将其复制到我的项目的工作区中。当我运行它时,它会选择我选择的文件,它将我的工作区识别为目标,但由于某种原因只是不复制文件。
JButton btnSelectFile = new JButton("Select File");
btnSelectFile.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
JFileChooser FileChooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("C, C++ or Java Files", "c", "cpp", "java");
FileChooser.setFileFilter(filter);
int returnValue = FileChooser.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION){
selectedFile = FileChooser.getSelectedFile();
filePath = selectedFile.getAbsolutePath();
InputStream inStream = null;
OutputStream outStream = null;
try{
File source =new File(filePath);
File dest =new File(System.getProperty("user.dir") + selectedFile.getName());
inStream = new FileInputStream(source);
outStream = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int length;
while ((length = inStream.read(buffer)) > 0){
outStream.write(buffer, 0, length);
}
if (inStream != null)inStream.close();
if (outStream != null)outStream.close();
System.out.println("File Copied..");
}catch(IOException e1){
e1.printStackTrace();
}
textArea.setText("File Loaded: " + selectedFile.getName() + "\n\n\n" + "Hit 'Run Code'");
}
else System.out.println("Failed to Load");
//UnitXMLReader.ChosenFile = filePath;
}
});
【问题讨论】:
-
您是否遇到任何运行时错误?如果是,是什么?
-
您使用什么证据表明它不会复制文件?例如,Eclipse 不一定会因为工作区目录中的文件发生变化而更新其在项目中的文件列表;您需要在文件更改后“刷新”项目,以确保 IDE 知道文件更改。如果您依靠 IDE 告诉您文件已被复制,并且您没有刷新项目,您可能会认为它没有被复制,但实际上确实如此。
-
您没有使用Files.copy 是否有特定原因?我知道这些文件在技术上是 inputStreams,但 Files.copy 提供了更多的灵活性。
-
我尝试了 Files.copy 和上面的方法。两者都没有给出运行时错误。在这两种方法中,我都没有给出任何错误指示,但它根本没有创建新文件。我尝试了@afzalex 提供的建议,它适用于上述方法。然后我转换回 Files.copy 方法,对目标路径进行了相同的更正,它工作了,所以我现在成功使用 Files.copy
-
当你使用@user时,他会收到通知。如果您想让他看到您在写什么,请使用它。 (我以为你不想在这里通知我。不过如果你想要的话很好:))。
标签: java swing file-io directory