将文件从JFileChooser复制到新目录

时间:2014-09-19 20:10:06

标签: java swing file-io directory

好的,我不确定为什么这不起作用但是我想尝试使用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;

        }
    });

2 个答案:

答案 0 :(得分:1)

创建目标File

时,请使用以下命令
File dest =new File(System.getProperty("user.dir"), selectedFile.getName());

而不是

File dest =new File(System.getProperty("user.dir") + selectedFile.getName());

<强>释
假设System.getProperty("user.dir")返回C:\Users\Me\WorkspaceselectedFile.getName()返回myfile.cpp 然后在你的情况下,dest代表C:\Users\Me\Workspacemyfile.cpp代替  C:\Users\Me\Workspace\myfile.cpp

告诉我是否还不清楚。

答案 1 :(得分:0)

对于File dest,请尝试用逗号分隔它们,而不是添加两者。

将dest的sysout作为添加版本和逗号版本,以查看为什么这样做会出现问题。