java中的FileNotFoundException

时间:2013-06-10 07:21:48

标签: java android file-io exception-handling filenotfoundexception

我正在开发一个需要文本文件访问的简单Android应用程序!即使我在File构造函数中指定了文件的绝对路径,我也得到filenotfoundexception。我的代码是

`File fr = new File("C:/mywork1/Dictionary/src/com/praveen/dictionary/vsn.txt");
                System.out.println(fr.getAbsolutePath());
                Scanner bb = new Scanner(fr);
                System.out.println(fr.exists());
                while((strf = bb.nextLine()) != null)
                {...

之前的一些问题的答案建议使用AssetsManager。我试过了。

AssetManager assetManager = Context.getAssets();
InputStream in = null;
in = assetManager.open("vsn.txt");

我为此代码获取的错误是

  

“无法对非静态变量进行静态引用”

在第一行。请帮助我解决这个问题..因为我使用onCreate方法,所以我甚至无法使用throws子句!我更改了运行配置中的设置,以便当前工作目录包含我的文本文件。感谢

5 个答案:

答案 0 :(得分:2)

Android设备不会保存或读取C:目录中的文件。

您必须将其移动到项目中的Resources文件夹中并以此方式包含它。

答案 1 :(得分:2)

Android基于Linux,因此不使用带有c:\等驱动器号的文件系统。

如果要打开文件,它取决于它的位置。如果您在资产目录中拥有它,则使用AssetsManager。您可以按照您尝试的方式执行此操作的原因是您在类上调用方法而不是对象。如果代码在Activity中,只需执行:

getAssets().open("vsn.txt");
片段中的

getActivity().getAssets().open("vsn.txt");

如果要访问外部文件目录,请在getExternalFilesDir(null)对象上调用Context

答案 2 :(得分:1)

要访问Android应用程序中的文件,请将该文件放入' assets'项目中的文件夹。然后你可以使用getAssets()来使用这个文件。 您可以使用以下代码从资产中读取文件

try {
    BufferedReader reader = new BufferedReader(
        new InputStreamReader(getAssets().open("filename.txt")));

    // do reading, usually loop until end of file reading  
    String mLine = reader.readLine();
    while (mLine != null) {
       //process line
       ...
       mLine = reader.readLine(); 
    }

    reader.close();
} catch (IOException e) {
    //log the exception
}

答案 3 :(得分:0)

使用外部存储SD卡进行文件创建和删除。 使用标准Java I / O.使用Environment.getExternalStorageDirectory()到达外部存储的根目录(在某些设备上是SD卡)。

下面是一个以编程方式移动文件的函数

在清单中设置正确的权限

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


private void moveFile(String inputPath, String inputFile, String outputPath) {

    InputStream in = null;
    OutputStream out = null;
    try {

        //create output directory if it doesn't exist
        File dir = new File (outputPath); 
        if (!dir.exists())
        {
            dir.mkdirs();
        }


        in = new FileInputStream(inputPath + inputFile);        
        out = new FileOutputStream(outputPath + inputFile);

        byte[] buffer = new byte[1024];
        int read;
        while ((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
        in.close();
        in = null;

            // write the output file
            out.flush();
        out.close();
        out = null;

        // delete the original file
        new File(inputPath + inputFile).delete();  


    } 

         catch (FileNotFoundException fnfe1) {
        Log.e("tag", fnfe1.getMessage());
    }
          catch (Exception e) {
        Log.e("tag", e.getMessage());
    }

}

删除文件使用

private void deleteFile(String inputPath, String inputFile) {
    try {
        // delete the original file
        new File(inputPath + inputFile).delete();  


    }
   catch (FileNotFoundException fnfe1) {
        Log.e("tag", fnfe1.getMessage());
    }
    catch (Exception e) {
        Log.e("tag", e.getMessage());
    }
}

复制

private void copyFile(String inputPath, String inputFile, String outputPath) {

    InputStream in = null;
    OutputStream out = null;
    try {

        //create output directory if it doesn't exist
        File dir = new File (outputPath); 
        if (!dir.exists())
        {
            dir.mkdirs();
        }


        in = new FileInputStream(inputPath + inputFile);        
        out = new FileOutputStream(outputPath + inputFile);

        byte[] buffer = new byte[1024];
        int read;
        while ((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
        in.close();
        in = null;

            // write the output file (You have now copied the file)
            out.flush();
        out.close();
        out = null;        

    }  catch (FileNotFoundException fnfe1) {
        Log.e("tag", fnfe1.getMessage());
    }
            catch (Exception e) {
        Log.e("tag", e.getMessage());
    }

}

答案 4 :(得分:0)

您可以将文本文件@sdcard或@assets文件夹放在Android应用程序中。要从SD卡访问文件,请提及Android: How to access a file in the SD Card&amp;从此链接Android - Access file from assets \ PDF display

中的assests文件夹提及访问文件