2013-07-03 91 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"); 
相关问题