如何使用java更改文件的扩展名?

时间:2017-03-05 23:48:12

标签: java

我想将一堆扩展名为m4a的文件重命名或转换为mp3文件。我可以手动重命名它们,但我认为我可以用java做到这一点,所以从我从其他人发现的问题我写了一个程序,当我尝试不同的东西时我遇到了很多错误所以我把它编辑到删除错误,并将其留给某人希望很容易确定我想要或想要做的事情。我做错了什么?我该如何解决?

import java.io.File;

public class FileConverter {
    File folder = new File("/Users/noah/Desktop/HeadphoneMusic/");
    File[] listOfFiles = folder.listFiles();
    String p;
   File f1,f2;
    public void convert(){
       for (int i=0; i<listOfFiles.length;i++) {
            if (listOfFiles[i].isFile()) {
                p = new String(listOfFiles[i].getName());
                f1 = new File("newFileName(p)");
                listOfFiles[i].renameTo(f1);
            }
        }
    }
    public String newFileName(String name){
        String newName="";
        for(int i=0; i<name.length()-3;i++){
            newName+=name.charAt(i);
        }
        newName+="mp3";
        return newName;

    }

}

public class Tester {

   public static void main(String[] args) {
        // TODO Auto-generated method stub
        FileConverter mp3 = new FileConverter();
        mp3.convert();



    }

}

所以我改为:

import java.io.File;

public class FileConverter {
    File folder = new File("/Users/noah/Desktop/HeadphoneMusic/");
    File[] listOfFiles = folder.listFiles();
    String oldFilename;
    File f1,f2;
    public void convert(){
        for (int i=0; i<listOfFiles.length;i++) {
            if (listOfFiles[i].isFile()) {
                oldFilename = new String(listOfFiles[i].getName());
                String newFilename = oldFilename.replaceAll("/.m4a$", ".mp3");
                File f1 = new File(listOfFiles[i].getParentFile(), newFilename);
                listOfFiles[i].renameTo(f1);
            }
        }
    }
}

public class Tester {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FileConverter mp3 = new FileConverter();
        mp3.convert();
    }
}

但是当我检查包含文件的文件夹时,没有任何改变。我做错了什么?

1 个答案:

答案 0 :(得分:1)

不要过于复杂化。

使用正则表达式轻微计算新文件名:

String newFilename = oldFilename.replaceAll("\\.m4a$", ".mp3");

但你也可以这样做:

String newFilename = oldFilename.substring(0, oldFilename.length() - 3) + "mp3";

与您的方法类似,但效率更高。它还假定所有文件都是m4a个文件,以.m4a结尾; 可能是真的,但最好不要假设,以防你在错误的目录上运行代码。

此外,File.getName()没有为您提供足够的路径来正确构建新的File。使用File.getParentFile()获取包含该文件的目录,然后使用它在与原始文件相同的目录中构建File

File f1 = new File(listOfFiles[i].getParentFile(), newFilename);