Android - 使用扫描器读取文件,如何访问文件

3

你好,我遇到了一个非常烦人的问题:我想要读取类似于这种格式的文本文件。

KEY
0 1 2 3 4 5 6 7
KEYEND

我试着使用Scanner类,因为它可以返回字符串、小数或其他类型的结果。

   public static void LoadStuff(String Name) {
      Scanner reader = null;
      try {
         reader = new Scanner(new File(Name));
      } catch (Exception e) {
         Log.d("damn", "FAIL");
      }
         if(reader != null)
            Load(reader);
   }


private static void Load(Scanner reader) {
      while (reader.hasNext()) {
         String result = reader.next();
         if (result == "KEY") {   // may be  result.equalsignorecase
            while (result != "KEYEND") {
               int index = reader.nextInt();
               Log.d("Index", String.valueOf(index));
            }
         }
      }
            reader.close();
   }

我无法实现以上操作,因为扫描程序找不到该文件,即使使用 "file.txt" 进行解析也不起作用,我也尝试了像这样的路径 "res/data/file.txt",但同样不起作用。请问我应该将文件放在哪里,以及如何获取目录以使其正常工作。谢谢。

6个回答

5

这段代码使用了你的类的getAssets()方法。你需要将文本文件放在Android项目的assets文件夹中。 getAssets方法返回一个AssetManager对象。open(String.format("filename.txt"))方法返回一个InputStream。InputStream是DataInputStream的参数。然后你可以将其作为Scanner的输入。

try {
    DataInputStream textFileStream = new DataInputStream(getAssets().open(String.format("filename.txt")));
    Scanner sc = new Scanner(textFileStream);
    while (sc.hasNextLine()) {
        String aLine = sc.nextLine();
        System.out.println(aLine);
    }
        sc.close();
} catch (IOException e) {
        e.printStackTrace();
}

1

我一直使用的代码来访问当前项目内的文件(也是文本文件)是:

textFileStream = new DataInputStream(getAssets().open(String.format("myFile.txt")));

您可以随时使用自己填充的字符串填充 String.format 部分。
关键是一直都是
getAssets()

部分。

所以在你的情况下,你可能有以下内容:

reader = new Scanner(new File(getAssets().open(String.format("myFile.txt")))); 

OR

reader = new Scanner(new File(getAssets().open(Name)));

File构造函数可以接受InputStream,getAssets().open将返回一个InputStream。


0
将您的文本文件放入assets文件夹中,然后使用getAssets().open("file.txt")读取它。

示例


如果您能接受这个答案,那就太好了。请参阅http://stackoverflow.com/faq#reputation。 - nhaarman

0
你可以像这样做:
File data = new File("yourfile"); 
Scanner sc = new Scanner(data);
int i = 0;
while(sc.hasNextLine){
    String Lines = sc.nextLine;
    System.out.println(Lines);
    i++;
}

0

要将文件写入内部存储器,请使用openFileOutput。根据Android 数据存储文档:

String FILENAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

使用Scanner读取文件:

File f = new File( getFilesDir(), FILENAME );
Scanner s = new Scanner( f );

注意:getFilesDir() 返回文件系统上使用 openFileOutput(String, int) 创建的文件存储目录的绝对路径。
要查看输出到文件的内容,请参阅:是否可以通过adb shell查看应用程序数据,就像我查看挂载SD卡一样?
其他存储选项

0
  1. 尝试使用这样的路径 "/sdcard/file.txt"

  2. 请在比较对象时始终使用 "equals"。 不要使用"=="或"!="与对象进行比较。(在Java中,String也是一个对象)

    例如:

     if (result.equals("KEY"))` {       // 使用equals
        `while (!(result.equals("KEYEND")))` {  // 使用!equals
    
           int index = reader.nextInt();
           Log.d("Index", String.valueOf(index));
        }
     }
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接