无法将.txt文件移动到Java中的存档文件夹

时间:2019-03-25 14:24:16

标签: java

我需要将所有以.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应移至存档文件夹

2 个答案:

答案 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);
}