文件model.obj位于我项目的assets目录中。出来的吐司是File Not Found异常。我在Galaxy S3上运行程序而不是虚拟设备。我是否必须指定文件的路径?
代码:
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;
}
}
答案 0 :(得分: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 :(得分:1)
FileInputStream fis = context.openFileInput(filename);
可以替换为
InputStream fis = context.getAssets().open(filename);
GetAssets()
会返回AssetManager:
提供对应用程序原始资产文件的访问权限;有关大多数应用程序要检索其资源数据的方式,请参阅Resources。此类提供了一个较低级别的API,允许您打开和读取与应用程序捆绑在一起的原始文件,作为简单的字节流。
答案 2 :(得分:1)
路径是assets / file / model.obj,你可以像这样读取文件
InputStream fis = mContext.getAssets().open("file/model.obj");