Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как прочитать текстовый файл, в String[]


Автор: Egnech 8.2.2008, 11:17
День добрый. Сталкнулся с такой проблеммой. Нужно написать функцию, которая будет загружать txt'шку, и возвращать массив String[].
Ошибка возникает при запуске приложения, когда пытается привести char к String. Вот код:
Код

    InputStream file;
    String res[] = null;
    Vector  temp = new Vector ();
    int counter = 0;
    try{            
    file = new FileInputStream(aFile);
    while (file.available() > 0) {
    temp.add((char)file.read());
        counter ++;
    }
    }catch (Exception e) {
      e.printStackTrace();
  }                
    res = new String [counter];    
    for (int i = 0; i < counter; i ++){
        res[i] = (String) temp.get(i);
    }
    return res;

Подскажите пожалуйста как решить мою проблему.

Автор: Kangaroo 8.2.2008, 11:29
Код

        BufferedReader reader = new BufferedReader(new FileReader("myNotes.txt"));
        String line = null;
        List<String> listOfLines = new ArrayList<String>();
        while ((line = reader.readLine()) != null) {
            listOfLines.add(line);
        }
        String[] arrayOfString = new String[listOfLines.size()];
        listOfLines.toArray(arrayOfString);

Автор: oFF_rus 8.2.2008, 11:36
Egnech, не хочу указывать на ошибку в Вашем коде, потому что Вы неправильно выбрали сам принцип:

A FileInputStream obtains input bytes from a file in a file system
т.е. он используется для чтения байтов! А чтобы читать символы (char) используются ридеры:
FileReader - Convenience class for reading character files

А чтобы читать тестовые файлы, удобнее всего использовать BufferedReader:
Read text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines. 

Именно пример использования BufferedReader привёл Kangaroo smile

Автор: _Y_ 8.2.2008, 11:37
Код

String res[] = new String[counter];
int i = 0;
try {
     BufferedReader in = new BufferedReader(new FileReader("filename"));
     String str;
     while ((str = in.readLine()) != null) {
         res[i++] = str;
     }
     in.close();
} catch (IOException e) {
}


Но выглядит это глуповато, т.к. читать файл приходится 2 раза. Я бы читал не в массив, а в ArrayList:
Код

ArrayList<String> res = new ArrayList<String>();
try {
     BufferedReader in = new BufferedReader(new FileReader("filename"));
     String str;
     while ((str = in.readLine()) != null) {
         res.add(str);
     }
     in.close();
} catch (IOException e) {
}



Автор: Egnech 8.2.2008, 11:44
Спасибо большое, заработало =)

Автор: Noobless 2.3.2008, 17:34
Здравствуйте.
Только начал разбираться с джавой, возникла в некоторой степени похожая проблема.

Нужно открыть текстовый файл и прочитать оттуда набор строк.
Делаю так.

Метод main()
Код

...
ObjClass c1;
c1 = new ObjClass();
c1.loadModels("c1.txt");
...


Класс ObjClass
Код

...
public void loadModels(String fn){
    try{
        BufferedReader f = new BufferedReader(new FileReader(fn));
...


Вот тут он и выкидывает исключение (если убрать try и соответствующие строки ниже)
Код

Compiling 1 source file to C:\Documents and Settings\user\Мои документы\NetBeansProjects\PatternRecognition_1\build\classes
C:\Documents and Settings\user\Мои документы\NetBeansProjects\PatternRecognition_1\src\PatternRecognition_1\ObjClass.java:22: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown


Файл точно есть. Использую NetBeans. Там куда только не кидал его в папке проекта. Пробовал даже просто на диск ц и прямо путь к нему указывать. И все равно - не найден, и все.

Что я делаю не так? smile 

Автор: Hidrag 2.3.2008, 20:46
он не выкидывает исключение он говорит что нужно обработать возможную ошибку. Обычно нетбинс в этом сильно помогает, странно..

Автор: sergioK 3.3.2008, 00:31
Цитата(Noobless @ 2.3.2008,  17:34)
Здравствуйте.
Только начал разбираться с джавой, возникла в некоторой степени похожая проблема.

Нужно открыть текстовый файл и прочитать оттуда набор строк.
Делаю так.

Метод main()
Код

...
ObjClass c1;
c1 = new ObjClass();
c1.loadModels("c1.txt");
...


Класс ObjClass
Код

...
public void loadModels(String fn){
    try{
        BufferedReader f = new BufferedReader(new FileReader(fn));
...


Вот тут он и выкидывает исключение (если убрать try и соответствующие строки ниже)
Код

Compiling 1 source file to C:\Documents and Settings\user\Мои документы\NetBeansProjects\PatternRecognition_1\build\classes
C:\Documents and Settings\user\Мои документы\NetBeansProjects\PatternRecognition_1\src\PatternRecognition_1\ObjClass.java:22: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown


Файл точно есть. Использую NetBeans. Там куда только не кидал его в папке проекта. Пробовал даже просто на диск ц и прямо путь к нему указывать. И все равно - не найден, и все.

Что я делаю не так? smile

Жава обязывает обрабабывать исключения , там где они могут возникнуть,
и не только при работе с файлами , это на уровне компиляции,  а есть файл 
или нет - уровень исполнения,


Автор: Noobless 3.3.2008, 14:14
Цитата(sergioK @ 3.3.2008,  00:31)
Жава обязывает обрабабывать исключения , там где они могут возникнуть,
и не только при работе с файлами , это на уровне компиляции,  а есть файл 
или нет - уровень исполнения,

Вот оно что... Спасибо за инфу.
Как выяснилось, основная ошибка была в специфике джавовских типов и их инициализации. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)