簡體   English   中英

無法將文件從我的計算機本地目錄加載到Java程序

[英]unable to load file from my computers local directory to java program

我試圖編寫代碼來對字符串進行排序,從文本文件中獲取輸入。當我試圖為此程序指定文件時,這給了我FileNotFoundExcetion我無法理解為什么? 即使我試圖通過為此編寫代碼來獲取文件路徑,在screenShoot中也可以看到該路徑正確,但是程序仍然給我錯誤

這是屏幕短https://app.box.com/s/qytu1d9xlm0vcb6atz42

這是我的代碼

public static void main(String[] args) throws FileNotFoundException, IOException {
  ArrayList<String> row1 = new ArrayList<>();
  FileWriter writer;

  try {

     String filename = "1.txt";
     String finalfile = "";
     String workingDir = System.getProperty("user.dir");

     String your_os = System.getProperty("os.name").toLowerCase();
     if (your_os.indexOf("win") >= 0) {
        finalfile = workingDir + "\\" + filename;
     } else if (your_os.indexOf("nix") >= 0 || your_os.indexOf("nux") >= 0) {
        finalfile = workingDir + "/" + filename;
     } else {
        finalfile = workingDir + "{others}" + filename;
     }

     System.out.println("Final filepath : " + finalfile);
     File file = new File(finalfile);

     if (file.createNewFile()) {
        System.out.println("Done");
     } else {
        System.out.println("File already exists!");
     }

  } catch (IOException e) {
     e.printStackTrace();
  }

  try (BufferedReader reader = new BufferedReader(new FileReader("finalfile"))) {
     String s;
     while ((s = reader.readLine()) != null) {
        row1.add(s);
     }
     Collections.sort(row1);
     writer = new FileWriter("output.txt");
     for (String s1 : row1) {
        writer.write(s1 + "\n");
     }
     reader.close();
     writer.close();
  } catch (Exception e) {
     System.out.print("Error : " + e);
  }

}

BufferedReader reader = new BufferedReader(new FileReader("finalfile"))) 

FileReader構造函數的參數硬編碼為“ finalfile”-您需要使用變量:

BufferedReader reader = new BufferedReader(new FileReader(finalfile))) 
                                                         ^^^^^^^^^^^

您還需要移動String finalfile = ""; 在第一個try塊之前,否則在創建FileReader時超出范圍。

此外,也無需查詢操作系統並手動設置目錄路徑分隔符。 如果確實需要,請使用File.separator 否則,只需使用正斜杠- 這可以跨平台工作

很高興看到您正在使用try-with-resources但是,您應該這樣做。 只需在try語句中創建所有必需的資源,然后就無需顯式關閉它們:

try (BufferedReader reader = new BufferedReader(new FileReader(finalfile));
     FileWriter writer = new FileWriter("output.txt")) {

   ...

   // reader and writer will be auto-closed
} catch (IOException e) {
   System.out.print("Error : " + e);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM