2013-07-03 97 views
0

文件model.obj位於我的項目的assets目錄中。出來的Toast是一個File Not Found異常。我正在我的Galaxy S3上運行該程序,而不是虛擬設備。我必須指定文件的某個路徑嗎?android FileNotFound異常

代碼:

import java.io.FileInputStream; 
    import java.io.FileNotFoundException; 
    import java.io.FileOutputStream; 
    import java.io.IOException; 
    import java.util.Date; 

    import android.content.Context; 
    import android.app.Activity; 

    public class ImportOBJ { 

     protected void onCreate(String filename,Context context) 
     { 
      try 
      { 
       FileInputStream fis = context.openFileInput(filename); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(fis)); 

       String line = null, input=""; 

       while((line = reader.readLine()) != null) 
       { 
        input += line; 
       } 

       reader.close(); 
       fis.close(); 

      } 
      catch (Exception ex) 
      { 
       Toast.makeText(context, ex.toString(), Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

ManActivity:

package com.example.tictactoeshowgrid; 

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

    public class MainActivity extends Activity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      ImportOBJ obj_import=new ImportOBJ(); 
      obj_import.onCreate("model.obj",MainActivity.this); 

      setContentView(R.layout.activity_main); 
     } 

     @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; 
     } 

    } 

回答

2

使用下面的代碼從資產管理的文件:

AssetManager assetManager = getResources().getAssets(); 
InputStream inputStream = null; 

try { 
    inputStream = assetManager.open("foo.txt"); 
    if (inputStream != null) 
     Log.d(TAG, "It worked!"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
1
FileInputStream fis = context.openFileInput(filename); 

可與

InputStream fis = context.getAssets().open(filename); 
被替換

GetAssets()返回AssetManager

提供訪問應用程序的原始資產的文件;有關大多數應用程序想要檢索其資源數據的方式,請參閱Resources。該類提供了一個較低級別的API,允許您打開並讀取已與應用程序捆綁在一起的原始文件作爲簡單的字節流。

1

路徑爲資產/文件/ model.obj,你可以閱讀文件中像這樣

InputStream fis = mContext.getAssets().open("file/model.obj"); 
相關問題