2016-10-22 6 views
0

Используя eclipse, у меня есть файл под названием bad_words.txt в папке проекта под названием HackGSU. Я хочу найти файл и прочитать содержимое файла. Я видел этот ответ how to read text file relative path и я попытался это:Как прочитать файл, который находится в папке проекта java

private static String words[][] = new String[3][]; 
private static int ok = 17 + 2; //Add two for comment & empty line in text file 
private static int med = 26 + 2; //Add two for comment & empty line in text file 
private static int bad = 430 + 1; //Add one for comment in text file 
private static String p = new File("").getAbsolutePath(); 

public static String[][] openFile() { 

    p.concat("/HackGSU/bad_words.txt"); 

    //Set the a limit for the amount of words in each row 
    words[0] = new String[getOk()]; 
    words[1] = new String[getMed()]; 
    words[2] = new String[getBad()]; 

    //Read the text file to add bad words to an array 
    try { 
     FileReader fr = new FileReader(p); 
     //Wrap file 
     BufferedReader br = new BufferedReader(fr); 

     //Add each line of file into the words array 
     for(int i = 0; i < words.length; i++) {    

      for(int j = 0; j < words[i].length; j++) { 
       try { 
        words[i][j] = br.readLine(); 
       } 
       catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

    } 
    catch (FileNotFoundException e1) { 
     e1.printStackTrace(); 
    } 

    return words; 
} 

Но я получил этот отслеживающий:

java.io.FileNotFoundException: C:\Users\nbrow_000\workspaceProjects\HackGSU (Access is denied) 
at java.io.FileInputStream.open0(Native Method) 
at java.io.FileInputStream.open(Unknown Source) 
at java.io.FileInputStream.<init>(Unknown Source) 
at java.io.FileInputStream.<init>(Unknown Source) 
at java.io.FileReader.<init>(Unknown Source) 
at gsu.hack.harassment.BadWords.openFile(BadWords.java:28) 
at gsu.hack.harassment.HarassFilter.<clinit>(HarassFilter.java:10) 
at gsu.hack.harassment.CheckPercentage.main(CheckPercentage.java:20) 

Exception in thread "main" java.lang.NullPointerException 
at gsu.hack.harassment.HarassFilter.checkHarass(HarassFilter.java:23) 
at gsu.hack.harassment.CheckPercentage.main(CheckPercentage.java:20) 

Я тоже так этот ответ How to read a text file directly from Internet using Java?, но у меня была проблема с конструктором URL.

Если я поместил локальный путь к файлу (C: //.../bad_words.txt), он работает нормально, но как я могу заставить программу читать файл, чтобы, если я упакую программное обеспечение, он все равно будет найти правильный путь к файлу.

+0

изменить на 'HackGSU/bad_words.txt' – emotionlessbananas

+0

Является ли' HackGSU' папкой проекта? или подпапка в нем? – c0der

+0

'p.concat ("/HackGSU/bad_words.txt ")' не будет работать, как вы могли бы исключить. Строки неизменяемы. 'concat' не добавляет что-то в' p', а возвращает новую строку. Перейдите в 'p + ="/HackGSU/bad_words.txt "' –

ответ

1

Глядя на ошибку это не выглядит как вы получаете полный путь. Вместо

p.concat("/HackGSU/bad_words.txt"); 

Попробуйте

p = p.concat("/HackGSU/bad_words.txt"); 
+0

. Часть«/HackGSU »была проблемой, потому что у меня уже была папка. Благодаря! –

0

Вы, вероятно, следует использовать обратную косую черту вместо слэш:

p.concat("\HackGSU\bad_words.txt"); 

Вы также можете попытаться ввести двойную обратную косую черту:

p.concat("\\HackGSU\\bad_words.txt"); 
+0

'concat' только ничего не изменит в результате, потому что строки неизменяемы, вам нужно новое задание обратно к p –

1

Если ваш ресурс уже в пути к классам, вам не нужно использовать относительные пути с File класса. Вы можете легко получить его из пути к классам, как:

java.net.URL url = getClass().getResource("bad_words.txt"); 
File file = new File(url.getPath()); 

или даже непосредственно в InputStream:

InputStream in = getClass().getResourceAsStream("bad_words.txt"); 

Поскольку у вас есть использование в static метод:

InputStream in = YourClass.class.getResourceAsStream("bad_words.txt"); 

Кроме того, как я уже упомянуто в моем комментарии:

p.concat("/HackGSU/bad_words.txt"); 

не согласуется с p, но возвращает новую связанную строку, потому что строки неизменяемы. Просто используйте: p+="/HackGSU/bad_words.txt" вместо

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