2016-07-21 11 views
0

Я работаю над небольшой небольшой программой для удовольствия, и теперь я заметил, что когда я запустить его и он пытается загрузить данные, которые он будет сказать: «имя файла, имени папки или синтаксис метки тома неправильно» Однако расположение файла точно такой жеПопытка загрузить данные из двоичного файла, приводит к FileNotFound, но файл находится там, если я ищу его в панели поиска Windows

@SuppressWarnings("resource") 
public static void loadData(String filename) { 
    int accounts = 0; 
    File f; 
    try { 
    FileInputStream is = new FileInputStream("./Clients/accountstorage.MKREAD"); 
    ObjectInputStream ois = new ObjectInputStream(is); 

    String lineSep = System.getProperty("line.separator"); 

    String nextLine = ""; 

    BufferedReader br = new BufferedReader(new FileReader("./Clients/" + "accountstorage.MKREAD")); 
    while((nextLine = br.readLine()) != null) { 
     f = new File((String) ois.readObject()); 
     System.out.println(f.isDirectory() + " " + f.isFile() + " " + f.exists()); 
     System.out.println(f.getAbsolutePath()); 
     String path = f.getAbsolutePath(); 
     is = new FileInputStream(path.replace("\\.", "") + "/" + filename + ".ACC"); 
     ois = new ObjectInputStream(is); 
     double bal = ois.readDouble(); 
     AccountState state = (AccountState) ois.readObject(); 
     String name = (String) ois.readObject(); 
     String lastname = (String) ois.readObject(); 
     int id = ois.readInt(); 
     Account accounte = new Account(id, name, lastname, bal, state); 
     getStorage().addAccount(accounte); 
     System.out.println("LOADED files"); 

     ois.close(); 
     is.close(); 
    } 




    } catch(Exception e) { 
     System.out.println(e.getMessage()); 
     e.printStackTrace(); 
     Alert("NOTE", e.getMessage()); 
    } 
} 

это приводит к следующему:

java.io.FileNotFoundException C:\Users\lucas\workspace\Dinges\Clients\Ouwens\Lucas 
\BalanceInfo.ACC (The filename, directory name, or volume label syntax is incorrect) 
     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 dinges.Account.loadData(Account.java:158) 
     at dinges.Main.main(Main.java:14) 

Однако, когда я ищу его в своих окнах bar C:\Users\lucas\workspace\Dinges\Clients\Ouwens\Lucas оно появляется, и BalanceInfo.ACC находится там

Но он не находит его, когда я пытаюсь его с программой, что может быть неправильно? Есть ли в нем возможный недопустимый символ?

ответ

0

Просто используйте абсолютный путь к файлу. Это было бы более легким решением. Например, я бы написал что-то вроде этого:

String dirPath = "C:\Users\lucas\workspace\Dinges\Clients\Ouwens\Lucas\"; 

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

Если вы делаете проект, который может быть загружен на разных компьютерах, этот метод не будет работать, но в этом случае, все, что вам нужно сделать, это использовать это:

System.getProperty("user.dir")); 

Это даст вам текущую директорию вы работаете. Затем вы можете использовать косые черты, чтобы перейти туда, где сохранен файл.

0

Я бы предположил, что есть некорректный символ где-то в имени файла.

Попробуйте заменить строку

is = new FileInputStream(path.replace("\\.", "") + "/" + filename + ".ACC"); 

с

String fullPath = path.replace("\\.", "") + "/" + filename + ".ACC"; 
    System.out.println(java.util.Arrays.toString(fullPath.toCharArray())); 
    is = new FileInputStream(fullPath); 

второй из этих трех линий должны распечатывать отдельные символы, которые составляют строку в fullPath, с не-ASCII символов появляться как символьные escape-последовательности, такие как \n или \u200b.

+0

Он по-прежнему дает ту же ошибку, infact теперь он ошибочно is = new FileInputStream (fullPath); –

+0

@LucasOuwens: Я бы не ожидал, что вышеупомянутое изменение вашего кода заставило бы его работать. Вы задали вопрос «Есть ли в нем возможный недопустимый символ?», И мой ответ поможет вам это выяснить. Что напечатала строка, которую я добавил? –

+0

хорошо! Ну, есть неизвестное пространство, которое не появляется в самом файле, поэтому я просто переписал метод –