(Обработка / Java) Преобразование особой файловой функции в функцию, которая принимает массив

Я пытаюсь создать программу, которая загружает несколько файлов и сохраняет их имя и тег 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 ответ

Решение

Одним из способов решения этой проблемы является использование классов для инкапсуляции данных, которые вы хотите отслеживать.

Например, вот упрощенный класс, который содержит информацию об исполнителе, треке и bpm:

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

Я также сделал бы шаг назад, разбил вашу проблему на более мелкие этапы, а затем разбирал эти кусочки по одному за раз. Можете ли вы создать функцию, которая принимает File аргумент и распечатывает данные MP3 этого File?

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

Получите это работает отлично, прежде чем двигаться дальше. Попробуйте назвать это жестко File случаи, прежде чем пытаться использовать его с ArrayList из нескольких File экземпляров.

Затем, если вы застряли, вы можете опубликовать MCVE вместе с конкретным техническим вопросом. Удачи.

Другие вопросы по тегам