2014-04-30 159 views
0

當我運行這個程序時,它找不到指向它的文件。我把這兩個文本文件放到程序的src文件夾中,並且爲了我的理解,我需要做的就是File f = new File("filename.txt")。但那不行。我也嘗試過使用File()中的確切目錄,但它也不起作用。這些文件只包含一個名字和一筆錢。有任何想法嗎?無法找到.txt文件的原因?

import java.io.*; 
import java.util.Scanner; 

class Donors { 
File donor2; 
File donor3; 
Scanner inD2; 
Scanner inD3; 

Donors(File d2, File d3){ 
    donor2 = d2; 
    donor3 = d3; 
} 

double totalDonations(){ 
    double total = 0; 
    try{ 
    inD2 = new Scanner(donor2); 
    while(inD2.hasNext()){ 
     total += inD2.nextDouble(); 
    } 
    }catch(java.io.FileNotFoundException e){ 
     System.out.println("File can't be found"); 
    } 

    try{ 
    inD3 = new Scanner(donor3); 
    while(inD3.hasNext()){ 
     total += inD3.nextDouble(); 
    } 
    }catch(java.io.FileNotFoundException e){ 
     System.out.println("File can't be found"); 
    } 

    return total; 
} 

public void closeFile(){ 
    inD2.close(); 
    inD3.close(); 
    } 
} 

public class DonorCalculations { 
public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int userInput; 
    File donor2 = new File("H:\\CSC 191\\Assignment9\\src\\resources\\donor2.txt"); 
    File donor3 = new File("donor3.txt"); 
    Donors dObj = new Donors(donor2, donor3); 

    do{ 
     System.out.println("SELECT"); 
     System.out.println("1. Total money from donations"); 
     System.out.println("2. Total donation from a individual"); 
     System.out.println("0. Quit"); 

     userInput = input.nextInt(); 
     System.out.println(); 

     switch(userInput){ 
      case 1: 
       System.out.println(dObj.totalDonations()); 
       break; 
      case 2: 
       System.out.println("Enter donor's name: "); 
       String name = input.next(); 
       //dObj.donorTotal(name); 
       break; 
      case 0: 
       System.out.println("Goodbye!"); 
       break; 
     } 
     System.out.println(); 
    }while(userInput != 0); 
    } 
} 
+0

我有一個當我使用eclipse時,這個問題與此類似。你能檢查以下路徑:路徑currentRelativePath = Paths.get(「」); – michaelp

回答

7

您現在已經將文件嵌入到您的應用程序中,使它們成爲嵌入式資源。您不能再像訪問文件一樣訪問它們。

相反,你需要使用資源查找功能的Java提供,例如...

InputStream donor2 = getClass().getResourceAsStream("/resources/donor2.txt"); 

這可能是也可能不是一件好事。

如果您必須從平面文件中讀取內容,那麼這些文件需要位於程序執行上下文的相對位置。

您可以使用System.out.println(System.getProperty("user.dir"));來確定當前程序的執行上下文,該程序將打印程序在其中執行的當前目錄。在開發過程中,您的文本文件應位於此目錄的相關上下文中。

當它的建成,因爲程序是從

1

更改執行的文件,將需要相同的相對範圍內:

File donor2 = new File("H:\\CSC 191\\Assignment9\\src\\resources\\donor2.txt"); 
File donor3 = new File("donor3.txt"); 
Donors dObj = new Donors(donor2, donor3); 

要:

File donor2 = new File("H:\\CSC 191\\Assignment9\\src\\resources\\donor2.txt"); 
File donor3 = new File(getClass().getClassLoader().getResource("donor3.txt")); 
Donors dObj = new Donors(donor2, donor3); 
相關問題