(处理/ Java)将单个文件函数转换为采用数组的函数

时间:2018-08-06 21:28:41

标签: java processing mp3 mp3agic

我正在尝试创建一个程序,该程序可以上载多个文件,并将它们的名称和BPM标记存储到ArrayList中,以便在文件之间进行比较。我发现有两个功能可以帮助我,但是我无法将它们组合起来以获得所需的功能。

第一个函数获取单个mp3文件,并将其数据输出到控制台(使用mp3agic库):

File file = new File(dataPath("") + "/Song.mp3");

Mp3File mp3file = new Mp3File(file.getPath());
    if (mp3file.hasId3v2Tag()) {
      ID3v2 id3v2Tag = mp3file.getId3v2Tag();
      println("Track: " + id3v2Tag.getTrack());
      println("Artist: " + id3v2Tag.getArtist());
      println("BPM: " +  id3v2Tag.getBPM());
      println("Album artist: " + id3v2Tag.getAlbumArtist());
    }

第二个函数采用数据路径并输出包含文件夹中文件名称和信息的目录

void setup() {

  String path = "Desktop/mp3folder";

  println("Listing all filenames in a directory: ");
  String[] filenames = listFileNames(path);
  printArray(filenames);

  println("\nListing info about all files in a directory: ");
  File[] files = listFiles(path);
  for (int i = 0; i < files.length; i++) {
    File f = files[i];    
    println("Name: " + f.getName());
    println("Is directory: " + f.isDirectory())
    println("-----------------------");
  }
}

// This function returns all the files in a directory as an array of Strings  
String[] listFileNames(String dir) {
  File file = new File(dir);
  if (file.isDirectory()) {
    String names[] = file.list();
    return names;
  } else {
    // If it's not a directory
    return null;
  }
}

// This function returns all the files in a directory as an array of File objects
// This is useful if you want more info about the file
File[] listFiles(String dir) {
  File file = new File(dir);
  if (file.isDirectory()) {
    File[] files = file.listFiles();
    return files;
  } else {
    // If it's not a directory
    return null;
  }
}

我要创建的函数将两者结合在一起。我需要第一个函数中的Artist,Track和BPM来处理目录中文件的数组列表。

任何指导将不胜感激。任何关于其他实现方法的建议也将不胜感激。

1 个答案:

答案 0 :(得分:1)

一种解决方法是使用classes封装要跟踪的数据。

例如,这是一个简化的类,其中包含有关艺术家,曲目和bpm的信息:

public class TrackInfo{
  private String artist;
  private String track;
  int bpm;
}

我也要退后一步,break your problem down into smaller steps,然后一次将这些片段放在一起。您是否可以创建一个接受File参数并输出该File的MP3数据的函数?

void printMp3Info(File file){
  // print out data about file
}

在继续之前,使它工作完美。在尝试与多个File实例中的ArrayList一起使用之前,请尝试使用硬编码的File实例调用它。

然后,如果您遇到困难,则可以发布MCVE以及特定的技术问题。祝你好运。