2017-05-05 96 views
1

我需要重命名一个名称为.txt文件的.afp文件。我试图让这件事情起作用,没有任何帮助,我偶然发现了许多“解决方案”。用不同扩展名的文件中的字符串重命名文件

假设我在C:/test/a/Mytes t.txt中有一个txt文件,并且我想要将.afp文件重命名为C:/files/b/Testf ile.afp。这正是我想要做的(根据在这个网站上找到的解决方案),它不起作用。我切.txt文件的扩展名并获得唯一的文件名:

String fileNameNoExt=fileName.substring(0, fileName.lastIndexOf('.')); 
//fileName is .txt file name 
File file = new File(afpSRC, afpName); 
file.renameTo(new File(afpSRC, fileNameNoExt + ".afp")); 

afpSRC包含路径到文件夹中.afp文件所在和afpName是文件的名称。

谁能告诉我为什么这不起作用和.afp文件名保持不变?

+0

是什么在'fileName'?它只需要文件名而不是完整的路径就可以工作。 – jingx

+0

我后来添加了评论,你可能没有看到,对不起。 fileName只是txt文件名。不是绝对路径 –

回答

0

可能是因为File file = new File(afpSRC, afpName);没有引用现有文件。

我怀疑afpSRC不是父路径或afpName不是文件名。或两者 ?

要进行调试,应该先检查文件是否存在。
如果不存在,则抛出异常。
除了任何方式(调试和最终代码),您应该检查返回的值renameTo()并处理它。

这里是一个示例代码:

String fileNameNoExt=fileName.substring(0, fileName.lastIndexOf('.')); 
//fileName is .txt file name 
File file = new File(afpSRC, afpName); 
if (!file.exists()){ 
    throw new RuntimeException("file not found = " + file); 
} 

boolean isRenamed = file.renameTo(new File(afpSRC, fileNameNoExt + ".afp")); 
System.out.println("isRenamed = " + isRenamed); 
if (!isRenamed){ 
    // handle the problem 
} 
+0

非常感谢,我意识到我复制.pdf版本的文件,而不是.afp在dst文件夹中,这是抛出错误,我只是在我试图检查文件是否存在后才得到它。由于这个愚蠢的错误而丢失了2个小时.. –

+0

不客气:)愚蠢的错误经常被评估:) – davidxxx

1

如果您使用Java NIO的设施,你将能够通过一个例外解释为什么重命名无法获取信息。

Files.move(Path from, Path to, CopyOption... options) throws IOException

String fileNameNoExt=fileName.substring(0, fileName.lastIndexOf('.')); 
Path afpPathName = Paths.get(afpSRC, afpName); 
Path newPathName = Paths.get(afpSRC, fileNameNoExt + ".afp"); 
Files.move(afpPathName, newPathName); 
+0

Paths.get在它的每个参数之间放置一个目录分隔符。第三行代码应该是'Paths.get(afpSRC,fileNameNoExt +“.afp”)'......除非你真的想创建一个基本名称只是“.afp”的文件。 – VGR

+0

@VGR哎呀!接得好。固定。 –

相关问题