簡體   English   中英

目錄中的Java重命名文件無法正常工作

[英]Java renaming files in directory doesn't work properly

我正在嘗試將給定目錄中的所有文件重命名為大寫。 它完成了全部任務,但是在文件夾文件名稱仍然不變的情況下什么也沒做。

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

它在控制台中顯示“完成”,但實際上什么也沒做

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

您可以使用以下內容檢查發生了什么。 一些小的更改包括使用File(parent,name)表單,以避免必須確定和添加OS特定的文件路徑分隔符。

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

        }
    }

}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM