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

时间:2014-09-08 10:44:07

标签: java file-io

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

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");
    }
}

它打印&#34;完成&#34;在控制台中,但没有真正完成

3 个答案:

答案 0 :(得分:1)

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

请注意,renameTo方法依赖于高度平台。阅读Javadoc

答案 1 :(得分:0)

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

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);

        }
    }

}

答案 2 :(得分:0)

正如ortis指出的那样,你错过了添加&#34; \&#34;在命名文件时。

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