我需要将所有以.txt结尾的文件移动到存档文件夹中。
我有以下代码,但是if (sourcepath.endsWith(".txt"))
无法验证文件扩展名。
File directory = new File("Archive");
System.out.println((System.getProperty("user.dir")));
File directory1 = new File (System.getProperty("user.dir"));
File[] files = directory1.listFiles();
if (! directory.exists()) {
directory.mkdir();
for(File f : files ) {
Path sourcePath = Paths.get(f.getName());
System.out.println(sourcePath);
if (sourcePath.endsWith(".txt")){ // Not validating
System.out.println(sourcePath.endsWith(extension));
Files.move(sourcePath, Paths.get("Archive"));
}
}
System.out.println("Clearing Folder.....All Files moved to Archive Directory");
}
预期输出:
C:\Users\harsshah\workspace\FFPreBatchValidation
.classpath
.project
.settings
bin
kjnk.txt
src
kjnk.txt应移至存档文件夹
答案 0 :(得分:6)
这里是doc about Path.endsWith(String)
测试此路径是否以Paths结尾,该路径是通过完全按照endsWith(Path)方法指定的方式转换给定的路径字符串构造而成的。例如,在UNIX上,路径“ foo / bar”以“ foo / bar”和“ bar”结尾。它不以“ r”或“ / bar”结尾。请注意,未考虑尾部分隔符,因此在路径“ foo / bar”上使用字符串“ bar /”调用此方法将返回true。
重要的部分是:It does not end with "r" or "/bar"
您必须将Path
转换为String
并调用String.endsWith(String)
而不是Path.endsWith(String)
答案 1 :(得分:0)
您可以使用此:
String extension = "";
int i = fileName.lastIndexOf('.');
if (i > 0) {
extension = fileName.substring(i+1);
}
假定您要处理的是类似于Windows的简单文件名,而不是archive.tar.gz之类的文件名。
顺便说一句,对于目录可能具有“。”但文件名本身没有的情况(例如/path/to.a/file),您可以这样做
String extension = "";
int i = fileName.lastIndexOf('.');
int p = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\'));
if (i > p) {
extension = fileName.substring(i+1);
}