0

在我读取了我想要获取其内容的文件并操作这两个文件的内容然后更新一个作为输出的新文件之后,我正在尝试读取 2 个文件。这些文件与程序位于同一文件夹中,但程序总是抛出一个FileNotFoundException. 以下是我的代码: -

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

public class UpdateMaster {

public static void main(String[] args)
{
    String master = "Customer.dat";
    String trans = "Transactns.dat";
    String newMaster = "Temp.txt";

    Scanner inputStreamMaster = null;
    Scanner inputStreamTrans = null;
    PrintWriter inputStreamNewMaster = null;

    try
    {
        inputStreamMaster = new Scanner(new File(master));
        inputStreamTrans = new Scanner(new File(trans));
        inputStreamNewMaster = new PrintWriter(newMaster);

    }
    catch(FileNotFoundException e)
    {
        System.out.println("Error: you opend a file that does not exist.");
        System.exit(0);
    }
    catch(IOException e)
    {
        System.out.println("Error.");
        System.exit(0);
    }



    do
    {

        String transLine = inputStreamTrans.nextLine();
        String masterLine = inputStreamMaster.nextLine();

        String[] transLineArr = transLine.split(","); 
        String[] masterLineArr = masterLine.split(",");

        int trAccNo = Integer.parseInt(transLineArr[0]);
        int sales = Integer.parseInt(transLineArr[1]);
        int masterAccNo = Integer.parseInt(masterLineArr[0]);
        int balance = Integer.parseInt(masterLineArr[1]);
        while(masterAccNo== trAccNo){

            inputStreamNewMaster.println(trAccNo+ " , "+masterAccNo);
            masterLine = inputStreamMaster.nextLine();
            masterLineArr = masterLine.split(",");
            masterAccNo = Integer.parseInt(masterLineArr[0]);
            balance = Integer.parseInt(masterLineArr[1]);
        }
        balance = balance + sales;
        inputStreamNewMaster.println(masterAccNo+ " , "+balance);








    }while(inputStreamTrans.hasNextLine());

    inputStreamMaster.close();
    inputStreamTrans.close();
    inputStreamNewMaster.close();


    //System.out.println(" the line were written to "+ newMaster);


}
}
4

5 回答 5

0

就像@Ankit Rustagi 在评论中所说的那样,如果要保留当前的实现,则需要文件的完整路径。

但是,有一个解决方案,您只需要文件名:使用BufferedReader/ BufferedWriter。请参阅此处有关如何使用这些类的示例(在示例中它使用完整路径,但没有它也可以工作)。

于 2013-10-25T09:35:37.923 回答
0

使用像 tihis 这样的相对路径并没有错。发生的事情是您的程序正在执行程序的目录中查找文件,该目录不一定是程序的文件夹。您可以通过在尝试读取文件之前记录文件的绝对路径来确认这一点。例如:

File masterFile = new File(master);
System.out.printf("Using master file '%s'%n", masterFile.getAbsolutePath());
inputStreamMaster = new Scanner(masterFile);

一般来说,您不应该硬编码文件路径,而是允许用户以某种方式指定它们,例如使用命令行参数、具有众所周知的路径的配置文件或交互式用户界面。

有一种方法可以定位程序的类文件,但它有点棘手,因为 Java 允许从可能位于远程系统中的压缩档案中加载类。最好以其他方式解决这个问题。

于 2013-10-25T09:37:16.187 回答
0

使用绝对路径

String master = "C:/Data/Customer.dat";
String trans = "C:/Data/Transactns.dat";
String newMaster = "C:/Data/Temp.txt";
于 2013-10-25T09:38:19.067 回答
0

该代码对我有用,我猜你拼错了一些文件名或者你的文件在错误的文件夹中。我在与 src 或项目相同的级别上创建了您的文件。这也是文件所在的文件夹。

于 2013-10-25T09:39:40.090 回答
0

尝试这个:

String current = new java.io.File( "." ).getCanonicalPath();
System.out.println("I look for files in:"+current);

查看您的程序希望在哪个目录中找到其输入文件。如果它显示正确的目录,请检查文件名的拼写。否则,您就知道出了什么问题。

于 2013-10-25T09:48:52.800 回答