2014-11-08 72 views
0

我遇到Android問題。我想打開文件,檢查它並返回一個簡單的值。如何閱讀Android資產中的文件

public void setMessageCode(String code){ 
     try { 
      messageCode = setMsg(code); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public String setMsg(String messageCode) throws IOException{ 
     String FILE = "src/dialogs.txt", msg; 
     BufferedReader in = new BufferedReader(new FileReader(FILE)); //IO Exception here 
     msg = in.readLine(); 
     while(msg!=null){ 
      message = msg.split(","); 
      for(int i=0; i<message.length; i++) 
       if(message[i].equals(messageCode)){ 
        in.close(); 
        return message[i++]; 
       } 
      msg = in.readLine(); 
     } 
     in.close(); 
     return "Nothing to get"; 
    } 

因此,Eclipse沒有看到問題,並且工作完美。 ADT失敗。 Dialogs.txt在src/...中,我檢查了數百萬次。該怎麼辦?

+0

聽起來路徑/文件是不正確的。當您移動到ADT時,您的程序將移至ADT文件空間。您必須將程序使用的任何文件移動到正確的位置。 – cliff2310 2014-11-09 00:02:25

+0

不,問題是資產不是設備上的實際文件,而僅僅是類似文件的對象,只有部分類似的API。 – 2014-11-09 14:30:47

回答

0

好的。我處理了這個問題。我通過使用getAssets(「fileName」)從活動中傳遞文件的本地化,並在InputStreamReader的類中使用它。現在看起來像這樣。

public void setMessageCode(InputStream location, String code){ 
    try { 
     messagee = setMsg(location, code); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public String setMsg(InputStream location, String messageCode) throws IOException{ 
    String FILE = "assets/a.txt", msg; 
    BufferedReader in = new BufferedReader(new InputStreamReader(location)); 
    msg = in.readLine(); 
    while(msg!=null){ 
     message = msg.split(","); 
     for(int i=0; i<message.length; i++) 
      if(message[i].equals(messageCode)){ 
       in.close(); 
       return message[i+1]; 
      } 
     msg = in.readLine(); 
    } 
    in.close(); 
    return "Nothing to get"; 
} 
0

您可以在運行項目時打開文件系統表單窗口>查看並導航到您的安裝路徑以查看您是否有該文件。

如果你想讀取你的文件並且不需要改變它,那麼使用資產。你想寫入你的文件,然後你需要將它保存在你的設備上,這也要求你有適當的權限在你的SD卡手機上讀寫。

在使用它之前,請檢查您的文件是否存在於您的設備上。

+0

我只需要從文件中讀取。所以我把文件移動到資產。我也改變了文件的路徑,問題依然存在。 – Kris 2014-11-09 00:31:25

1
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     try { 
      String first_line = read_file("dialogs.txt"); 
      System.out.print(first_line); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 


    public String read_file(String filename) throws IOException { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       getAssets().open(filename))); 

     int i=0; 
     String line = reader.readLine(); 
     while (line != null) { 
      if(++i==1) 
       return line;//only read the first line 
      line = reader.readLine(); 
     } 

     reader.close(); 
     return "Nothing to get"; 
    } 

} 
+0

是的,這是好的。我做了同樣的事情,但我需要它在Activity類之外,所以我只傳遞了(InputStream)getAsstes()的值。感謝您的回覆! – Kris 2014-11-09 13:37:24

+0

歡迎您,:) 大多數時候我寧願創建一個帶有靜態值的助手類,以便它們在任何地方都可用。 – Soley 2014-11-10 13:35:02