我在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);。这是我的项目截图
2条答案
按热度按时间li9yvcax1#
问题是这一行:
你没有看到返回值,所以如果失败了,你的代码就像成功了一样。
java.io.文件已过时。它是Java 1.0的延续,Java 1.0有一些不太理想的设计决策。其中之一是决定让File类的许多方法返回一个值,就像C库一样,而不是在失败时抛出异常。
将这行代码更改为:
编译器会告诉你必须捕获IOException。不要写一个空的
catch
块-这个异常会告诉你为什么重命名文件失败。至少,catch块应该在捕获的异常上调用printStackTrace()
。wgmfuz8q2#
这个代码对我来说很好。