linux中java和从CD驱动器读取数据的问题
我一直在尝试编写一个简单的音频裂土器,我可以用它来了解不同编解码器的工作原理,但我在第一步遇到了困难,我无法让我的程序从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
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" );