2

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

`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");

我得到这个代码的错误是

“不能对非静态变量进行静态引用”

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

4

5 回答 5

2

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

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

于 2013-06-10T07:26:34.593 回答
2

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

如果你想打开一个文件,它取决于它在哪里。如果您在资产目录中有它,则使用AssetsManager. 您可以按照您尝试的方式执行此操作的原因是因为您在类而不是对象上调用方法。如果代码是Activity简单的:

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

在片段中执行:

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

如果您想访问getExternalFilesDir(null)您的Context对象上的外部文件目录调用。

于 2013-06-10T07:31:49.633 回答
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
}
于 2013-06-10T07:34:36.177 回答
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());
    }

}
于 2013-06-10T07:30:56.287 回答
0

您可以将文本文件 @sdcard 或 @assets 文件夹放在 android 应用程序中。提到从 sdcard 访问文件 Android: How to access a file in the SD Card & to access file from assests folder in this link Android - Access file from assets \ PDF display

于 2013-06-10T07:30:58.943 回答