linux中java和从CD驱动器读取数据的问题

linux中java和从CD驱动器读取数据的问题,java,ripping,Java,Ripping,我一直在尝试编写一个简单的音频裂土器,我可以用它来了解不同编解码器的工作原理,但我在第一步遇到了困难,我无法让我的程序从CD中读取,下面的代码就是我一直在尝试使用的代码 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.u

我一直在尝试编写一个简单的音频裂土器,我可以用它来了解不同编解码器的工作原理,但我在第一步遇到了困难,我无法让我的程序从CD中读取,下面的代码就是我一直在尝试使用的代码

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)
我不明白为什么我会得到这个,我认为maby RandomFileAccess不是合适的类,但我能找到的唯一一件事是它应该可以工作

任何关于如何从java读取CD的帮助都将不胜感激


干杯,丹尼尔这不完全一样,但我想这会让你走


如果你不想使用内置的东西(出于教育原因),它是开源的,所以你可以看看他们是如何做到的

此问题有一个与您的问题相关的问题和答案:

根据链接的问题和公认的答案,答案是“是”和“否”。您可以为本机接口提供一个使用适配器模式的Java API,但您还必须做许多事情,从而使解决方案不再是纯Java,而是混合:

  • 创建支持装载/卸载命令的Java接口创建
  • 将接口实现为本机方法的类创建本机
  • 此命令的C或其他语言实现。一个
  • implemantation for OS(Win、Mac、Linux)将其打包到一个jar构建中
  • 提供接口和负载实现的小型工厂 本地图书馆

如果
/dev/sr0
是目录,则存在问题。请尝试将其中一个音频文件作为参数传递,例如

        File cd = new File( "/dev/sr0/track1" );

这应该是可行的。

首先,您应该挂载到登录操作系统Linux的用户可以访问的目录上。例如:/mnt/cdrom或/media/cdrom

然后打开mp3文件或音频文件:

File cd = new File( "/dev/sr0/track1.mp3" );


(别忘了音频或Mp3文件的扩展名)。

您的CD是否已装入并可通过
/dev/sr0
访问?是的,我确定是这样,我运行了“cdrecord-v dev=/dev/sr0-toc”,它是用来打印CD的目录,当我尝试时,它没有给出任何错误,它给了我一个错误“RandomAccessFile rawAccess=新的RandomAccessFile(cd,“r”);“说它不是目录
File cd = new File( "/dev/sr0/track1.dat" );