android FileNotFoundException

时间:2013-07-03 05:08:40

标签: android file-io

文件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;
        }

    }

3 个答案:

答案 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");