Android - 使用扫描仪读取文件,如何获取文件

时间:2012-06-11 14:38:06

标签: java android file dir

您好我遇到了一个非常烦人的问题 我想阅读与此类似的文本文件

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 个答案:

答案 0 :(得分:5)

此代码使用您班级的getAssets()方法。您需要将文本文件放在Android项目的assets文件夹中。 getAssets方法返回AssetManager对象。 open(String.format("filename.txt"))方法返回一个InputStream。 InputStream是DataInputStream的参数。然后使用它作为扫描仪的输入。

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 :(得分: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构造函数可以接受一个I​​nputStream,getAssets()。open将返回一个InputStream。

答案 2 :(得分:0)

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

Example

答案 3 :(得分:0)

  1. 尝试提供这样的路径"/sdcard/file.txt"

  2. 在比较对象时,请始终“equals”。 Never use "==" or "!=" with Objects. (String is an object too in Java)

    例如:

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

答案 4 :(得分:0)

要将文件写入内部存储,请使用openFileOutput。根据Android Data Storage doc:

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)创建的文件。

要查看您输出到文件的内容,请查看:is it possible to see application data from adb shell the same way I see it mounting SD card?

其他Storage Options

答案 5 :(得分: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++;
}