2016-01-14 2 views
0

Я делаю пример из книгиFileInputStream пример, I/O Ошибка: Файл не найден

"Java The Complete Reference Ninth Edition"

, который демонстрирует FileInputStream с использованием примерочных с ресурсами. На выходе у меня есть "I/O Error: java.io.FileNotFoundException: C:\Users\user\Documents\NetBeansProjects\JavaExam\FileInputStreamDemo.java (Can't find file)". Код:

package javaexam; 
import java.io.*; 

class FileInputStreamDemo { 
    public static void main(String args[]) { 
     int size; 

     // Use try-with-resources to close the stream. 
     try (FileInputStream f = 
       new FileInputStream("C:\\Users\\user\\Documents\\NetBeansProjects\\JavaExam\\FileInputStreamDemo.java")) 
     { 

      System.out.println("Total Available Bytes: " + (size = f.available())); 
      int n = size/40; 
      System.out.println("First " + n + " bytes of the file one read() at a time"); 
      for (int i = 0; i < n; i++) { 
       System.out.print((char) f.read()); 
      } 
      System.out.println("\nStill Available: " + f.available()); 
      System.out.println("Reading the next " + n + " with one read(b[])"); 
      byte b[] = new byte[n]; 
      if (f.read(b) != n) { 
       System.err.println("couldn't read " + n + " bytes."); 
      } 
      System.out.println(new String(b, 0, n)); 
      System.out.println("\nStill Available: " + (size = f.available())); 
      System.out.println("Skipping half of remaining bytes with skip()"); 
      f.skip(size/2); 
      System.out.println("Reading " + n/2 + " into the end of array"); 
      if (f.read(b, n/2, n/2) != n/2) { 
       System.err.println("couldn't read " + n/2 + " bytes."); 
      } 
      System.out.println(new String(b, 0, b.length)); 
      System.out.println("\nStill Available: " + f.available()); 
     } catch (IOException e) { 
      System.out.println("I/O Error: " + e); 
     } 
    } 
} 
+1

Наиболее очевидный вопрос: можете ли вы найти 'C: \ Users \ User \ Documents \ NetBeansProjects \ JavaExam \ FileInputStreamDemo.java' на компьютере, на котором выполняется этот код? –

+0

Кстати, цитируя [@TJCrowder] (http://stackoverflow.com/a/2417546/3788176): «С библиотеками Java для работы с файлами вы можете безопасно использовать/(слэш, а не обратную косую черту) на всех платформах ». Вам не нужно использовать '\\' в строковом литерале, вы можете использовать '/' вместо этого. –

+0

Конечно, я могу найти этот файл на своем компьютере по тому же самому пути. –

ответ

0

Я думаю, ваша проблема может быть, что вы используете обратную косую черту. Хотя я не уверен. Вместо этого попробуйте использовать BufferedReader.

File file = new File("C:/Users/user/Documents/NetBeansProjects/JavaExam/FileInputStreamDemo.java"); 
BufferedReader bufferedreader = new BufferedReader(new FileReader(file)); 

Используя это, вы должны быть в состоянии прочитать это намного более легко, и строка за строкой, а не побайтно.

+0

Спасибо за совет, я пробовал, но это привело к следующему замечанию: несовместимые типы: try-with-resources, не применимые к типу переменной (файл не может быть преобразован в AutoCloseable) –

+0

Вы не можете использовать его таким же образом вы должны использовать FileInputStream. Вы используете его как итератор. Вы проверяете, есть ли у него другая строка, затем получите следующую строку, если это произойдет. – ViperLordX

0

Файл, который вы ищете, должен находиться в папке src под пакетом javaexam. В противном случае он не будет скомпилирован. По соглашениям Java каждый класс public должен иметь имя файла и находиться в папке с именем пакета.

new FileInputStream("C:\\Users\\user\\Documents\\NetBeansProjects\\JavaExam\\src\\javaexam\\FileInputStreamDemo.java")) 
+0

Он находится в папке src под пакетом javaexam. –

+0

, то вы должны использовать его в пути рядом с тем, что может быть, вы можете искать файл другого пользователя и не иметь административных прав. И это будет совершенно неправильно, если вы используете этот путь для Linux или Mac. –

+0

Какой путь вы имеете в виду? Это в свойствах проекта? –

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