2013-07-25 3 views
2

Я хотел бы знать, как загрузить файл lol.txt из src в мой метод закрытия. Код до сих пор:Загрузите файл из папки src в считыватель

   public void close() throws IOException { 
     boolean loadFromClasspath = true; 
     String fileName = "..."; // provide an absolute path here to be sure that file is found 
     BufferedReader reader = null; 
     try { 

      if (loadFromClasspath) { 
       // loading from classpath 
       // see the link above for more options 
       InputStream in = getClass().getClassLoader().getResourceAsStream("lol.txt"); 
       reader = new BufferedReader(new InputStreamReader(in)); 
      } else { 
       // load from file system 
       reader = new BufferedReader(new FileReader(new File(fileName))); 
      } 

      String line = null; 
      while ((line = reader.readLine()) != null) { 
       // do something with the line here 
       System.out.println("Line read: " + line); 
      } 
     } catch (IOException e) { 
      JOptionPane.showMessageDialog(null,e.getMessage()+" for lol.txt","File Error",JOptionPane.ERROR_MESSAGE); 
     } finally { 
      if (reader != null) { 
       reader.close(); 
      } 
     } 
    } 

Консоль вывода ошибок при инициировании:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at java.io.Reader.<init>(Unknown Source) 
at java.io.InputStreamReader.<init>(Unknown Source) 
at main.main.close(main.java:191) 
at main.main$1.windowClosing(main.java:24) 
at java.awt.Window.processWindowEvent(Unknown Source) 
at javax.swing.JFrame.processWindowEvent(Unknown Source) 
at java.awt.Window.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Window.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$000(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
+0

Если вы просто хотите прочитать файл, это выглядит хорошо. Если вы хотите использовать эти файлы как классы Java или что-то в этом роде, скорее всего, больше. – MathSquared

+0

Что содержит файл .txt? Обычный текст или определение класса? –

+0

'Класс # getResourceAsStream (String)' –

ответ

7

Если вы хотите загрузить файл внутри файла JAR (т.е. от CLASSPATH), см this answer больше вариантов о том, как получить InputStream. В приведенном ниже коде я исключил обработку исключений и удалил связанный код Random.

public void close() { 
    boolean loadFromClasspath = true; 
    String fileName = "..."; // provide an absolute path here to be sure that file is found 
    BufferedReader reader = null; 
    try { 

     if (loadFromClasspath) { 
      // loading from classpath 
      // see the link above for more options 
      InputStream in = getClass().getClassLoader().getResourceAsStream("absolute/path/to/file/inside/jar/lol.txt"); 
      reader = new BufferedReader(new InputStreamReader(in)); 
     } else { 
      // load from file system 
      reader = new BufferedReader(new FileReader(new File(fileName))); 
     } 

     String line = null; 
     while ((line = reader.readLine()) != null) { 
      // do something with the line here 
      System.out.println("Line read: " + line); 
     } 
    } catch (IOException e) { 
     JOptionPane.showMessageDialog(null,e.getMessage()+" for lol.txt","File Error",JOptionPane.ERROR_MESSAGE); 
    } finally { 
     if (reader != null) { 
      reader.close(); 
     } 
    } 
} 

Edit: кажется, что вы либо делаете что-то не так с вашей структурой папок или вы используете неправильное имя пакета/файл. Просто быть чистым. На данный момент у вас есть класс под названием main под пакетом main. Ваша структура папок должна быть что-то вроде этого: (? Кстати те LOWERCASE единиц не цифра вправо)

+ src/ 
    + main/ 
     main.java 
     lol.txt 

При компиляции, файл lol.txt должен быть скопирован под /bin/main/ папка

Если это так, то используйте такой код: InputStream in = getClass().getClassLoader().getResourceAsStream("main/lol.txt");

Если ваша структура папок отличается, пожалуйста, измените соответственно

+0

Все еще не работает dunno why:/same error and everything –

+0

@VitalijKornijenko Этот код проверен и работает. Вы пытаетесь использовать классный путь? Какое значение вы используете в качестве аргумента для 'getResourceAsStream()'? И в какой пакет входит ваш файл? –

+0

Если случай класса маршрута означает доступ к файлам в jar, где расположены классы сети, тогда да. Использование ур точно того же кода только бросает IOException. Создал новый пакет недавно maain –

0

Если вы хотите получить InputStream файла (ресурса) из пути к классам, вы можете сделать следующее

InputStream in = this.getClass().getResourceAsStream("lol.txt"); 

Предполагая, что ресурс с именем lol.txt находится в том же пакете, что и класс, представленный и возвращенный getClass().

Если ресурс не в том же пакете, вы можете префикс пути с /, чтобы сообщить методу посмотреть корень пути к классам.

InputStream in = this.getClass().getResourceAsStream("/lol.txt"); // or /some/resource/path/lol.txt for some other path starting at root of classpath 

Если вы пытаетесь получить доступ к ресурсу из метода static, вы не будете иметь доступ к this. Вы должны будете использовать

YourClass.class.getResourceAsStream("/lol.txt"); 

Read the javadoc here.

+0

Не могли бы вы взглянуть на код. Это дает мне некоторые ошибки:/ –

+0

@VitalijKornijenko. Также вы можете увидеть текст ошибки/stacktrace. –

+0

@VitalijKornijenko Вы не можете использовать 'FileReader' с' InputStream'. Используйте «InputStreamReader». 'new InputStreamReader (in);'.Также внимательно следите за чтением строк. Всегда проверяйте, есть ли ** IS ** строка. –

Смежные вопросы