java - 读取上下文并重命名

java - read context and rename

一个文件夹中大约有 50 个 xml 个文件。我需要通读每个文件的内容并找到上下文(例如:年份)并在文件名中使用那一年。

此外,我需要增加。
例如,如果在其中 10 个文件中找到的上下文(年份)是 2013 年,则文件名应为 2013001、2013002、2013003、...、2013010。

希望这是清楚的。
谢谢

我 100% 没听懂,但是,您可以继续 Files 的 API。 您有许多有用的功能,例如:

  • isDirectory : 判断路径是否为目录。
  • list : 列出目录的所有条目
  • 行:在文件(为您准备的文本文件)上创建一个流,以及 遍历每一行;你可以在这里找到你的年份。
  • 移动:将文件移动或重命名为目标文件。

您可以递归地浏览目录并搜索每个文件的日期。之后你可以简单地重命名文件并将日期附加为字符串。(代码可能无法 100% 工作,因为我目前没有 IDE 来测试它。)

public void recursivelySearchFiles(String startPath) throws IOException {

     File root = new File(startPath);
     File[] list = root.listFiles();

     if (list == null) return;

     for ( File f : list ) {
         if ( f.isDirectory() ) {
             recursivelySearchFiles(f.getAbsolutePath());
         }
         else {
             BufferedReader br = new BufferedReader(new FileReader(f));
             String resultYear = "";
             String line;
             while ((line = br.readLine()) != null) {
             resultYear = getSubStringFromString(line);

             }
             br.close();
             renameFile(f, resultYear);
             System.out.println( "File:" + f.getAbsoluteFile() );
         }
     }
 }

 public String getSubStringFromString(String line){
     Pattern pattern = Pattern.compile("\d{4}");
     Matcher matcher = pattern.matcher(line);
     if (matcher.find())
     {
         return matcher.group(1);
     }else{
         return "";
     }
 }

 public void renameFile(File oldfile, String year) throws IOException{
        String newPath = oldfile.getAbsolutePath().substring(0, oldfile.getAbsolutePath().lastIndexOf("."));
        String ending = oldfile.getAbsolutePath().substring(oldfile.getAbsolutePath().lastIndexOf(".")-1, oldfile.getAbsolutePath().length());
        newPath += year;
        File file2 = new File(newPath + ending);
        if(file2.exists()) throw new java.io.IOException("file exists");

        boolean success = oldfile.renameTo(file2);
        if (!success) {
            System.out.println("renaming not successful");
        }
 }