0

我正在尝试以编程方式设置一些 mp3 的 ID3 标签。放弃 jaudiotagger 后,我找到了 MyID3 库http://www.fightingquaker.com/myid3/

我绝不是一个经验丰富的 Java 程序员,但我对 OOP 有一定的了解。我设法写了一堂课,一切正常,除了一个我无法理解的奇怪错误。我的课是:

    import org.cmc.music.myid3.*;
import org.cmc.music.metadata.*;
import java.io.*;
import java.lang.*;



/**
 * The HelloWorldApp class implements an application that
 * simply prints "Hello World!" to standard output.
 */
class lrsetid3 {
    public static void main(String[] args) {

        String files;
        File inputfolder = new File("c:\\ID3\\input");
        File[] listOfFiles = inputfolder.listFiles(); 

        for (int i = 0; i < listOfFiles.length; i++) 
        {
                if (listOfFiles[i].isFile()) 
                {
//                      files = listOfFiles[i].getName();
            }
            try {
                MusicMetadataSet src_set = new MyID3().read(listOfFiles[i]);


                IMusicMetadata metadata = src_set.getSimplified();
                String artist = metadata.getArtist(); 
                    metadata.setArtist("Bob Marley");
                    System.out.println(listOfFiles[i].getName());
                        File src = new File ("c:\\ID3\\input" + listOfFiles[i].getName());                      
                        System.out.println(listOfFiles[i].isFile());
                        System.out.println(listOfFiles[i].exists());

                    File dst = new MyID3().write(src, dst, src_set, metadata);              
//                  System.out.println("Artist" + artist); // Display the string.


            }
            catch (Exception e){
                            e.printStackTrace();
                    }

        }



    }

我得到的错误就在线: File dst = new MyID3().write(src, dst, src_set, metadata);

    lrsetid3.java:37: error: incompatible types
                                        File dst = new MyID3().write(src, dst, src_set, metadata);
                                                                    ^
  required: File
  found:    void
1 error

奇怪的部分是打印输出说 write 函数的第一个参数是 File ......我不明白为什么编译器不想接受 src 作为 File 变量。

非常感谢您的帮助

4

1 回答 1

1

这将返回一个新的 MyID3 对象。

File dst = new MyID3();


然而,这将返回 write() 方法返回的内容。在这种情况下无效。(我相信)

File dst = new MyID3().write(src, dst, src_set, metadata);


要修复它,请执行以下操作:

File dst = new MyID3();
dst.write(src, dst, src_set, metadata);


当然,同样的规则也适用于这一行:

MusicMetadataSet src_set = new MyID3().read(listOfFiles[i]);
于 2013-08-14T07:58:06.897 回答