Я считываю *.mp3 файлы но покуда только по именам, как еще добавить сюда вывод альбома, длительности и путь непосредственно к файлу. Нашёл много инфы и библиотек, но там примеры для одного файла.
public class Main {
public static void main(String[] args) {
String path = "D:\\music";
File dir = new File("D:\\music");
File[] files = dir.listFiles(new HeyFile());
for (File fileloop : files) {
System.out.println(fileloop.getName());
}
}
public class HeyFile implements FileFilter {
public boolean accept(File file) {
return file.getName().endsWith(".mp3");
}
}
}
Для получение мета-информации о mp3 файле, вы можете использовать apache tika Java API. Можно получить Название, Альбома, Длительности и т.д. (требуется подключить jars tika-parsers-1.4, tika-core-1.4)
Простая программа
package com.parse.mp3;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.parser.mp3.Mp3Parser;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class AudioParser {
/**
* @param args
*/
public static void main(String[] args) {
String fileLocation = "G:/asas/album/song.mp3";
try {
InputStream input = new FileInputStream(new File(fileLocation));
ContentHandler handler = new DefaultHandler();
Metadata metadata = new Metadata();
Parser parser = new Mp3Parser();
ParseContext parseCtx = new ParseContext();
parser.parse(input, handler, metadata, parseCtx);
input.close();
// List all metadata
String[] metadataNames = metadata.names();
for (String name : metadataNames) {
System.out.println(name + ": " + metadata.get(name));
}
// Retrieve the necessary info from metadata
// Names - title, xmpDM:artist etc. - mentioned below may differ based
System.out.println("----------------------------------------------");
System.out.println("Title: " + metadata.get("title"));
System.out.println("Artists: " + metadata.get("xmpDM:artist"));
System.out.println("Composer : " + metadata.get("xmpDM:composer"));
System.out.println("Genre : " + metadata.get("xmpDM:genre"));
System.out.println("Album : " + metadata.get("xmpDM:album"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (TikaException e) {
e.printStackTrace();
}
}
}
источник ответа
Разобрался и с путем и с длительностью.
Путь: fileloop.getAbsolutePath()
просто при выводе это добавил
Что насчет длительности, то нашел в интернетах инфу:во первых нужно создать метод и добавить toMinutes(metadata.get("xmpDM:duration"))
public static String toMinutes(String timeInMilis) {
double milis = Double.valueOf(timeInMilis);
long second = (long) (milis / 1000) % 60;
long minute = (long) (milis / (1000 * 60)) % 60;
long hour = (long) (milis / (1000 * 60 * 60)) % 24;
return hour != 0 ? String.format("%02dh:%02dm:%02ds", hour, minute, second) : String.format("%02dm:%02ds", minute, second);
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я слышал, что у frontpad есть apiМне нужно через Java подключиться к frontpad и отправлять с мобильного приложения заказы
Вот фрагмент кода в котором задан конструктор, принимающий функциональный интерфейс, принимающий и возвращающий DoubleМожно вместо параметра...
У меня в проекте используется GraphQL, и я пытаюсь замапить даты на поле типа LocalDateЗапрос такой: