2012-10-14 13 views
6

Tôi đã cố gắng viết một trình ripper âm thanh đơn giản mà tôi có thể sử dụng để tìm hiểu cách hoạt động của CODEC khác nhau nhưng tôi đã bị kẹt ở bước đầu tiên, tôi không thể tải chương trình của mình để đọc từ đĩa CD, mã folowing là những gì tôi đã cố gắng để sử dụngVấn đề với dữ liệu java và đọc từ ổ CD trong 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); 
    } 

} 

nhưng nó mang lại cho tôi những lỗi folowing

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) 

và tôi không thể tìm ra lý do tại sao tôi có được điều này, tôi mặc dù maby RandomFileAccess không phải là lớp thích hợp để sử dụng nhưng điều duy nhất tôi có thể tìm thấy nói rằng điều này sẽ làm việc

Bất kỳ trợ giúp nào về cách đọc CD từ java sẽ được đánh giá cao.

Cheers Daniel

+0

CD của bạn có được lắp và truy cập thông qua '/ dev/sr0' không? –

+0

yes im chắc chắn là, tôi chạy "cdrecord -v dev =/dev/sr0 -toc", có nghĩa là in ra Mục lục của đĩa CD và nó đã cho phép bất kỳ lỗi nào –

Trả lời

0

Câu hỏi này có một vấn đề có liên quan và trả lời đó là thích hợp cho vấn đề của bạn: Mount and unmount hard drives

Theo câu hỏi liên quan và trả lời được chấp nhận, câu trả lời là cả hai "Có" và "Không". Bạn có thể cung cấp một API Java sử dụng Adapter Pattern cho giao diện bản xứ, nhưng bạn cũng sẽ phải làm một số việc, do đó làm cho các giải pháp không chỉ đơn thuần Java, nhưng một lai:

  • tạo giao diện Java hỗ trợ các lệnh mount/unmount tạo các lớp
  • triển khai giao diện dưới dạng các phương thức gốc tạo ra các cú pháp gốc
  • triển khai các lệnh này bằng ngôn ngữ C hoặc ngôn ngữ khác. Một
  • implemantation cho hệ điều hành (Win, Mac, Linux) đóng gói nó vào một jar xây dựng
  • nhà máy nhỏ cung cấp thực hiện của giao diện và tải thư viện nguồn gốc
0

Nếu /dev/sr0 là thư mục, sau đó có một vấn đề. Vui lòng thử chuyển một trong các tệp âm thanh dưới dạng tham số, ví dụ:

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

Điều đó sẽ hoạt động.

+0

Khi tôi thử nó mang lại cho tôi một lỗi cho dòng "RandomAccessFile rawAccess = new RandomAccessFile (cd," r ");" nói rằng đó không phải là thư mục –

3

Trước hết bạn nên gắn kết vào một thư mục mà người dùng đã đăng nhập vào hệ điều hành Linux có quyền truy cập. Ví dụ.:/Mnt/cdrom hoặc/media/cdrom

Sau đó mở file mp3 của bạn hoặc tập tin âm thanh:

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

hoặc

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

(đừng quên phần mở rộng của âm thanh hoặc Tệp Mp3).

Các vấn đề liên quan