2010-11-02 29 views
25

Tôi có tệp tài nguyên trong/res/raw/folder (/res/raw/textfile.txt) mà tôi đang cố gắng đọc từ ứng dụng Android của mình để xử lý.Truy cập các tệp tài nguyên trong Android

public static void main(String[] args) { 

    File file = new File("res/raw/textfile.txt"); 

    FileInputStream fis = null; 
    BufferedInputStream bis = null; 
    DataInputStream dis = null; 

    try { 
     fis = new FileInputStream(file); 
     bis = new BufferedInputStream(fis); 
     dis = new DataInputStream(bis); 

     while (dis.available() != 0) { 
       // Do something with file 
      Log.d("GAME", dis.readLine()); 
     } 

     fis.close(); 
     bis.close(); 
     dis.close(); 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 

Tôi đã thử cú pháp con đường khác nhau nhưng luôn có được một java.io.FileNotFoundException lỗi. Tôi có thể truy cập /res/raw/textfile.txt để xử lý như thế nào? Là Tệp tệp = tệp mới ("res/raw/textfile.txt"); phương pháp sai trong Android?


* Trả lời: *

// Call the LoadText method and pass it the resourceId 
LoadText(R.raw.textfile); 

public void LoadText(int resourceId) { 
    // The InputStream opens the resourceId and sends it to the buffer 
    InputStream is = this.getResources().openRawResource(resourceId); 
    BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
    String readLine = null; 

    try { 
     // While the BufferedReader readLine is not null 
     while ((readLine = br.readLine()) != null) { 
     Log.d("TEXT", readLine); 
    } 

    // Close the InputStream and BufferedReader 
    is.close(); 
    br.close(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Hãy xem xét chúng tôi ing [Apache Commons] (http://commons.apache.org/proper/commons-io/). Tìm kiếm 'IOUtils' ở đó. – JJD

Trả lời

23

Nếu bạn có một tập tin trong res/raw/textfile.txt từ Hoạt động/cuộc gọi Widget của bạn:

getResources().openRawResource(...) trả về một InputStream

Các chấm nên thực sự được một số nguyên được tìm thấy trong R.raw ... tương ứng với tên tập tin của bạn, có thể R.raw.textfile (nó thường là tên của file mà không cần mở rộng)

new BufferedInputStream(getResources().openRawResource(...)); sau đó đọc nội dung của tập tin như một dòng suối

+0

Tôi đã thử: File file = new File (R.raw.textfile); - Tôi sẽ cố gắng sử dụng getResources() OpenRawResource (R.raw.textfile) và đưa nó vào File nếu có thể. – Selzier

+0

Không có vấn đề làm thế nào tôi sử dụng "getResources(). OpenRawResource (R.raw.textfile)" eclipse luôn luôn cung cấp cho các lỗi "Phương thức getResources() là không xác định cho loại MyClass". – Selzier

+0

getResources() là một phương thức của lớp Ngữ cảnh. Bạn chỉ có thể nhận được các tài nguyên liên quan đến một ngữ cảnh. – Falmarri

10

Chỉ cần thực tế là bạn có public static void main(String[] args) này có nghĩa là bạn đang thực hiện mã của bạn cực kỳ sai lầm. Bạn gần như chắc chắn đã không đi qua bất kỳ hướng dẫn hello android. Bạn chắc chắn nên làm điều đó.

+1

+1 bắt tốt! Loại funny nhìn thấy một phương pháp chính trên một ứng dụng android XD – Cristian

+0

Tôi đã được thông qua tất cả các hướng dẫn hello android, bao gồm tất cả các hướng dẫn xem một, hướng dẫn đăng nhập lỗi, và hướng dẫn notepad. Tôi không có chuyên gia java mặc dù và không hiểu tại sao sử dụng công cộng void tĩnh chính (String [] args) là sai. – Selzier

+2

vì đó không phải là cách Android chạy các ứng dụng. Bây giờ, bạn có thể bao gồm điều này, có lẽ, để chạy thử nghiệm của riêng bạn hoặc một cái gì đó (tại sao không?) Nhưng trong thế giới Android, chương trình của bạn là không bao giờ thực sự kiểm soát. Khi một sự kiện nào đó xảy ra (chẳng hạn như khi người dùng nhấn một nút), phương thức gọi lại tương ứng trong ứng dụng của bạn được gọi. Khi cuộc gọi lại của bạn kết thúc, hãy kiểm soát trở lại Android. –

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