3

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

KEY
0 1 2 3 4 5 6 7
KEYEND

我尝试使用扫描器类,因为它可以以字符串、小数等形式返回结果

   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”也不起作用我应该把文件放在哪里以及如何获取使它工作的目录谢谢

4

6 回答 6

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();
}
于 2016-03-25T18:39:28.057 回答
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。

于 2012-06-11T14:45:46.040 回答
0

将文本文件放入文件assets夹中,然后使用getAssets().open("file.txt").

例子

于 2012-06-11T14:46:00.597 回答
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 卡一样?.

其他存储选项

于 2014-03-04T22:15:44.917 回答
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));
        }
     }
    
于 2012-06-11T16:38:20.223 回答
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++;
}
于 2018-06-30T08:42:57.583 回答