Проблемы с Java и чтения данных с компакт-диска в Linux
Я пытался написать простой аудио-риппер, который я мог бы использовать, чтобы узнать, как работает разные кодеки, но я застрял на первом шаге, я не могу заставить свою программу читать с компакт-диска, следующий код - это то, что я пытался использовать
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;
public class learning
{
public static void main(String[] args) throws IOException
{
File cd = new File( "/dev/sr0" );
RandomAccessFile rawAccess = new RandomAccessFile( cd, "r" );
byte[] content = new byte[20];
rawAccess.seek(19613);
rawAccess.readFully(content);
System.out.println(content);
}
}
но это дает мне следующую ошибку
Exception in thread "main" java.io.IOException: Input/output error
at java.io.RandomAccessFile.readBytes(Native Method)
at java.io.RandomAccessFile.read(RandomAccessFile.java:355)
at java.io.RandomAccessFile.readFully(RandomAccessFile.java:414)
at java.io.RandomAccessFile.readFully(RandomAccessFile.java:394)
at learning.main(learning.java:21)
и я не могу понять, почему я получаю это, хотя Мэйби RandomFileAccess не был правильным классом для использования, но единственное, что я мог найти, сказал, что это должно работать
Любая помощь о том, как читать компакт-диски из Java, будет очень цениться.
Ура Дэниел
4 ответа
Прежде всего, вам следует подключить каталог, к которому у пользователя, вошедшего в ОС Linux, есть доступ. Например: /mnt/cdrom или /media/cdrom
После этого откройте свой mp3-файл или аудиофайл:
File cd = new File( "/dev/sr0/track1.mp3" );
или же
File cd = new File( "/dev/sr0/track1.dat" );
(не забудьте расширение файла Audio или Mp3).
Если /dev/sr0
каталог, то есть проблема. Пожалуйста, попробуйте передать один из аудиофайлов в качестве параметра, например
File cd = new File( "/dev/sr0/track1" );
Это должно работать.
У этого вопроса есть связанная проблема, и ответ, относящийся к вашей проблеме: Монтирование и размонтирование жестких дисков.
Согласно связанному вопросу и принятому ответу, ответом является "Да" и "Нет". Вы можете предоставить Java API, который использует шаблон адаптера для собственного интерфейса, но вам также придется сделать несколько вещей, что делает решение не просто Java, а гибридом:
- создавать интерфейсы Java, которые поддерживают команды монтирования / размонтирования
- классы, реализующие интерфейсы как нативные методы, создающие нативные
- реализации этих команд на C или другом языке. Один
- реализация для ОС (Win, Mac, Linux) упаковать его в одну сборку jar
- небольшая фабрика, которая обеспечивает реализацию интерфейса и загружает собственные библиотеки
Это не совсем то же самое, но я подозреваю, что это поможет вам...
Есть ли независимый от платформы способ (Java?) Для чтения оглавления аудио CD?
Если вы не хотите использовать встроенный материал (в образовательных целях), http://www.tritonus.org/ является открытым исходным кодом, поэтому вы можете посмотреть, как они это сделали.