当前位置: 首页 > 知识库问答 >
问题:

Java重命名目录中的文件无法正常工作

厉文栋
2023-03-14

我正在尝试将给定目录中的所有文件重命名为大写。它完成了整件事,但在文件夹中没有做任何事情文件名仍然相同。

import java.io.File;
import java.io.IOException;

public class FileOps {

    public static void main(String[] argv) throws IOException {

        File folder = new File(
                "C:\\Users\\N\\Desktop\\New folder\\RenamingFiles\\src\\renaming\\Files");
        File[] listOfFiles = folder.listFiles();

        for (int i = 0; i < listOfFiles.length; i++) {
            if (listOfFiles[i].isFile()) {
                File f = new File(
                    "C:\\Users\\N\\Desktop\\New folder\\RenamingFiles\\src\\renaming\\Files"
                            + listOfFiles[i].getName());
                f.renameTo(new File(
                    "C:\\Users\\N\\Desktop\\New folder\\RenamingFiles\\src\\renaming\\Files"
                            + listOfFiles[i].getName().toUpperCase()
                            + ".txt"));
            }
        }

        System.out.println("Done");
    }
}

它在控制台中打印“Done”,但实际上什么都没做

共有3个答案

昝成弘
2023-03-14

正如ortis所指出的,您在命名文件时错过了添加“\”。

                f.renameTo(new File(
                "C:\\Users\\N\\Desktop\\New folder\\RenamingFiles\\src\\renaming\\Files"
                        + listOfFiles[i].getName().toUpperCase()
                        + ".txt"));

一遍又一遍地执行此代码将导致将. txt添加到文件名中。您可以考虑使用apache FileUtils来获取扩展。

对代码进行这些更改,

File folder = new File("/home/ubuntu/Desktop/pics");
File[] listOfFiles = folder.listFiles();

for(File file : listOfFiles){
    if(file.isFile()){          
        String fileName =   FilenameUtils.removeExtension(file.getName()).toUpperCase() ; 
        String newPath = folder + File.separator + fileName+ "."+ FilenameUtils.getExtension(file.getName());
        file.renameTo(new File(newPath));
    }
}
甄坚白
2023-03-14

您可以使用以下内容来检查发生了什么。一些小改动包括使用文件(父,名称)表单,以避免必须确定和添加操作系统特定的文件路径分隔符。

package com.example.renaming;

import java.io.File;
import java.io.IOException;

public class TestRename {
    private static final String[] defaultArgs = { "C:\\Users\\N\\Desktop\\New folder\\RenamingFiles\\src\\renaming\\Files" };
    private static TestRename me;
    private static String[] arguments;

    public static void main(String[] args) {
        me = new TestRename();
        if (args == null | args.length == 0) {
            arguments = defaultArgs;
        } else {
            arguments = args;
        }
        me.doWork(arguments);

    }

    private void doWork(String[] arguments) {
        int numFiles = 0;
        File folder = new File(arguments[0]);

        try {
            System.out.println("Working on " + folder.getCanonicalPath());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        File[] fileList = folder.listFiles();
        if (fileList == null) {
            System.out.println("No files fould");
        } else {

            for (int i = 0; i < fileList.length; i++) {
                System.out.println("File " + fileList[i].getName());
                if (fileList[i].isFile()) {
                    numFiles++;
                    try {
                        String currentName = fileList[i].getName();
                        File parent = fileList[i].getParentFile();
                        String newName = currentName.toUpperCase() + ".txt";
                        System.out.println(" .. current = " + currentName);
                        System.out.println(" .. newname = " + newName);

                        // Avoids having to get the file path separator for an OS
                        File newFile = new File(parent, newName);
                        System.out.println(" .. new File = "
                                + newFile.getCanonicalPath());
                        fileList[i].renameTo(newFile);

                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }

            System.out.println("Done, found " + numFiles);

        }
    }

}
蒙光华
2023-03-14

在您的if语句中,您忘记添加结尾分隔符:

 if (listOfFiles[i].isFile()) {
        File f = new File(
                "C:\\Users\\N\\Desktop\\New folder\\RenamingFiles\\src\\renaming\\Files\\"// <- Missing separator
                        + listOfFiles[i].getName());
        f.renameTo(new File(
                "C:\\Users\\N\\Desktop\\New folder\\RenamingFiles\\src\\renaming\\Files\\"// <- Missing separator
                        + listOfFiles[i].getName().toUpperCase()
                        + ".txt"));
 }

适当的实施方式是:

if (listOfFiles[i].isFile()) 
         listOfFiles[i].renameTo(new File(folder, listOfFiles[i].getName().toUpperCase()+ ".txt"));//not sure why this .txt

小心,重命名为方法高度依赖于平台。阅读Javadoc

 类似资料:
  • 问题内容: 我有这样的事情: 我想将这些文件重命名为以下形式: 在同一目录中。 我想我可以使用,但是我不知道如何在文件夹和文件重命名的同时使用它。 问题答案: 可以使用bash for loop和: 请注意,如果目录名称包含空格,则上述解决方案将不起作用。相关链接。 另一种基于注释的解决方案(也适用于名称中也包含空格的目录):

  • 问题内容: 有没有一种简单的方法可以使用Python重命名目录中已包含的一组文件? 示例: 我有一个充满* .doc文件的目录,我想以一致的方式重命名它们。 X.doc->“ new(X).doc” Y.doc->“ new(Y).doc” 问题答案: 这样的重命名非常容易,例如使用os和glob模块: 然后可以在示例中使用它,如下所示: 上面的示例会将dir中的所有文件都转换为,其中是文件的先前

  • 前面小节介绍了文件和目录的创建、移动、删除、打包、压缩,本小节介绍如何对已有的文件或者重命名,好的文件命名规范将提升对文件和目录管理的效率。 1. 使用 mv 命令对文件名称 这里还是以 /home 目录的 alltxt.tar 文件为例,可以使用 mv 命令对其重命名: ls mv alltxt.tar newtxt.tar ls 执行结果如下图: 如上图所示相当于文件移动路径没变,名称变

  • 问题内容: 我正在尝试使用Python重命名目录中的某些文件。 假设我有一个名为的文件,并且想要删除,所以我得到的文件名将是 我正在尝试使用,但无法正常工作。我也考虑过使用字符串操作,但也没有成功。 问题答案: 使用重命名或移动文件或目录。

  • 我正在解决一个问题,其中一些方法没有被识别。我觉得发布整个代码是没有必要的,所以我为这些特定的方法创建了一个程序。他们仍然没有被认出。 就我所能想象的,这可能是我的vs代码的一个问题。该代码在其他目录中运行良好。有什么建议吗? Java版本:Java 18.0.1.1 我已尝试清理工作区,但问题仍然存在于目录中。

  • 我一直在使用PDF文件中的命名目标来打开文件中特定位置的PDF文件。负责生成PDF文档的团队使用工具从图书标记自动生成命名目的地,因此命名目的地的名称往往类似于*9\u Glossary*或*Additional\u Information*。我们被要求用多种语言制作相同的文档。我预计我们将收到多种外语的PDF文档,在相同的位置带有书签,但图书标记的名称当然将使用这些其他语言,自动生成的命名目的地