2014-04-30 118 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); 
相关问题