【问题标题】:Error in file reading in android在android中读取文件时出错
【发布时间】:2013-09-26 17:07:01
【问题描述】:
public class Test {
public static void main(String args[])
{
    String numbers[];
    numbers = new String[81];


    try {
            FileInputStream fileInput = new FileInputStream("level.txt");
            int r,index=0;
            char y;
            while ((r = fileInput.read()) != -1) {
               y = (char)r;
               numbers[index++] = y + "";
            }
        }catch(Exception e){System.out.println("you are pawned !!");}

        for(int i=0;i<81;i++)
        System.out.println(numbers[i].length());
}
}

上面的代码在 Java 中运行得非常好,但是当我在 android 中使用它时,它给出了错误 - “不幸的是设备已经停止工作”。 “Test.java”和“level.txt”也在同一个文件夹中,所以我看不出它在android中不起作用的任何原因。

【问题讨论】:

  • 您是否有写入/读取设备存储的权限?
  • 你如何“在android中使用它”?它不是Activity,不能直接运行。另外,请提供logcat。
  • 嘿,您可以查看答案并尝试一下吗?然后选择接受其中之一。
  • 我得到了解决方案.. 我可以将“txt”文件存储在 /asset 或 /raw 中,然后分别使用 getAssets() 函数或 getResources() 。谢谢大家!!
  • 你能投票给答案吗? :)

标签: java android android-emulator


【解决方案1】:

android架构中没有“Test.java和level.txt在同一个文件夹”这样的东西。

在 android 中有内部和外部存储。您可以通过两种不同的方式获取其根目录。

外部存储(sdcard 文件夹):在这里您不必像内部存储器那样使用代码保存文件。你可以把它移到你的SD卡上。

String path = Environment.getExternalStorageDirectory() + "/level.txt";
FileInputStream fileInput = new FileInputStream(path);

内部存储器(app私有磁盘)

String path this.getFilesDir().getAbsolutePath() + "/" + name;
FileInputStream fileInput = new FileInputStream(path);

通过将此添加到 minifest 文件,授予您的应用从外部存储器读取/写入的权限:

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

应用程序中有很多地方可以放入文件。比如资产和原始文件夹。

获取资产文件夹中的文件流:

InputStream is = this.getAssets().open("level.txt");

获取原始文件夹中的文件流:

InputStream is = this.getResources().openRawResource(R.raw.level);

祝你好运。

【讨论】:

  • 非常感谢……这就是我在其他网站上发现的方式。 java和android对文件的处理是不同的。
【解决方案2】:

首先,此代码不是 Android 代码,因此我假设您将复制/粘贴方法的内容到主活动的 onCreate() 方法中

其次,您正在读取文件,该文件在您的设备上的什么位置?例如,它是在您的资产文件夹中,还是在 SD 上,或者在哪里!?

这个文件甚至在移动设备上都不存在,所以它怎么能访问它......在android中处理文件IO的一个简单方法是使用

getDir()

例如:

File directory = getDir() // from your activity
File file = new File(directory,"level.txt");
FileInputStream inputStream = new FileInputStream(file);
// and so on

【讨论】:

  • 我没有测试这段代码,但你可以认为它是一个可能有帮助的伪代码,我不记得 getDir() 方法的确切语法
  • 我得到了解决方案.. 我可以将“txt”文件存储在 /asset 或 /raw 中,然后分别使用 getAssets() 函数或 getResources() 。谢谢大家!!
猜你喜欢
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多