如何在java文件管理器应用程序中重命名文件和文件夹?

cczfrluj  于 2023-05-27  发布在  Java
关注(0)|答案(2)|浏览(138)

我在java中创建一个文件管理器。当我试图重命名文件和文件夹时,我遇到了一个问题。我从用户输入中获取新的文件名,然后我试图重命名文件。

popupMenu.rename.addActionListener(new ActionListener()
{           public void actionPerformed(ActionEvent e) {
                list.getSelectedValue().toString();
                JFrame frame = new JFrame("Rename");
                final JTextField textField=new JTextField();
                 String s = null;
                 File file2 = new File("newname");
                textField.addActionListener(new ActionListener(){
                       public void actionPerformed(ActionEvent ae){
                       s = textField.getText();
                       }
                    });
                Object o = list.getModel().getElementAt(list.getSelectedIndex());
                File file = new File(o.toString());
                //FileUtils.moveFile(file, newFile);
                  file.renameTo(file2);
                  //Files.move(file.toPath(),file.toPath().resolveSibling(textField.getText()));

                frame.add(textField);
                frame.setLocationRelativeTo(frame);
                frame.setSize(200,60);
                frame.setVisible(true);
            }
        });

请指出我所犯的错误。
另外,有没有一种方法,我可以重命名的文件类似于windows通过点击文本。我显示的文件和文件夹的名称由setText(fileName);。这是我的项目截图

li9yvcax

li9yvcax1#

问题是这一行:

file.renameTo(file2);

你没有看到返回值,所以如果失败了,你的代码就像成功了一样。
java.io.文件已过时。它是Java 1.0的延续,Java 1.0有一些不太理想的设计决策。其中之一是决定让File类的许多方法返回一个值,就像C库一样,而不是在失败时抛出异常。
将这行代码更改为:

Files.move(file.toPath(), file2.toPath());

编译器会告诉你必须捕获IOException。不要写一个空的catch块-这个异常会告诉你为什么重命名文件失败。至少,catch块应该在捕获的异常上调用printStackTrace()

wgmfuz8q

wgmfuz8q2#

String oldPath= finalPDFPath;  // old path

            File oldFile= new File(oldPath);

            String newPath= newPDFPath;  // new path
            
            File changeToNewPath = new File(newPath);
            
            if(!oldFile.exists()) {
                System.out.println("no folder");
            }else {
                
                passportFolder.renameTo(changeToNewPath ); // rename old to new path
                
                System.out.println("name changed");
                
            }

这个代码对我来说很好。

相关问题