2012-06-11 2 views
2

Здравствуй я получил весьма досадную проблему я хотел бы читать текстовые файлы, подобное этомуAndroid - Чтение файла с помощью сканера, как добраться до файла

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» не работает, пробовал также с путем как это «Рез/data/file.txt "также не работает , где я должен поместить файл и как получить каталог, чтобы заставить его работать благодаря

ответ

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

Конструктор Файл может взять в InputStream, то getAssets() открытый возвратит InputStream.

+0

работает отлично, спасибо – nullpointer

+0

Рад, что смог помочь ответить на ваш вопрос :-) – trumpetlicks

0

Поместите свой текстовый файл в папку assets, затем прочитайте его, используя getAssets().open("file.txt").

Example

+0

работ так же, как я хотел, спасибо – nullpointer

+0

Если вы могли бы принять ответ, что было бы здорово. См. Http://stackoverflow.com/faq#reputation – nhaarman

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)); 
        } 
    } 
    
0

Чтобы записать файл внутреннего использования openFileOutput хранения. Согласно Android Data Storage документ:

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

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

Чтобы использовать сканер для чтения файла:

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.

3

Этот код использует метод getAssets() вашего класса. Вам нужно поместить текстовый файл в папку активов вашего Android-проекта. Метод 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(); 
}