【问题标题】:Problems with java and reading data from a CD drive in linuxjava的问题和从Linux中的CD驱动器读取数据
【发布时间】:2012-10-04 11:08:34
【问题描述】:

我一直在尝试编写一个简单的音频开膛手,我可以用它来了解不同 CODEC 的工作方式,但我卡在第一步,我无法让我的程序从 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)

我不知道为什么我会得到这个,虽然我可能不适合使用 RandomFileAccess 类,但我能找到的唯一一件事是说这应该可以工作

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

干杯丹尼尔

【问题讨论】:

  • 您的 CD 是否已安装并可通过 /dev/sr0 访问?
  • 是的,我确定是这样,我运行了“cdrecord -v dev=/dev/sr0 -toc”,它的目的是打印出 CD 的目录,它没有给出任何错误

标签: java ripping


【解决方案1】:

这不完全一样,但我怀疑它会让你继续......

Is there a platform independent way (Java?) to read an audio CD's TOC?

如果你不想使用内置的东西(出于教育原因),http://www.tritonus.org/ 是开源的,所以你可以看看他们是如何做到的。

【讨论】:

    【解决方案2】:

    这个问题有一个与您的问题相关的问题和答案:Mount and unmount hard drives

    根据链接的问题和接受的答案,答案是“是”和“否”。您可以提供一个使用适配器模式的 Java API 作为本机接口,但您也将拥有做很多事情,从而使解决方案不是纯粹的 Java,而是混合:

    • 创建支持挂载/卸载命令的 Java 接口创建
    • 将接口实现为原生方法的类创建原生
    • 用 C 或其他语言实现此命令。一个
    • 操作系统(Win、Mac、Linux)的实现将其打包到一个 jar 版本中
    • 提供接口和负载实现的小工厂 原生库

    【讨论】:

      【解决方案3】:

      如果/dev/sr0 是目录,那么就有问题了。请尝试将其中一个音频文件作为参数传递,例如

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

      应该可以了。

      【讨论】:

      • 当我尝试它给我一个错误的行“RandomAccessFile rawAccess = new RandomAccessFile(cd, "r");"说它不是目录
      【解决方案4】:

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

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

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

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

      (不要忘记音频或 Mp3 文件的扩展名)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-07
        • 2020-02-22
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 2014-09-21
        • 2011-01-11
        • 1970-01-01
        相关资源
        最近更新 更多