Проблемы с 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/ является открытым исходным кодом, поэтому вы можете посмотреть, как они это сделали.

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