簡體   English   中英

文本輸入輸出Java

[英]Text input and output java

我在讀取要獲取其內容並操縱兩個文件內容的文件后嘗試讀取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);


}
}

就像@Ankit Rustagi在評論中說的那樣,如果要保留當前的實現,則需要文件的完整路徑。

但是,有一個解決方案,您只需要文件名:使用BufferedReader / BufferedWriter 在這里看到有關如何使用這些類的示例(在示例中,它使用完整路徑,但也可以在沒有完整路徑的情況下使用)。

使用諸如tihis之類的相對路徑沒有錯。 發生的情況是您的程序正在執行程序的目錄中查找文件,而該目錄不必是程序的文件夾。 您可以通過在嘗試讀取文件之前記錄文件的絕對路徑來確認這一點。 例如:

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

通常,您不應該對文件路徑進行硬編碼,而應允許用戶以某種方式指定它們,例如使用命令行參數,具有眾所周知路徑的配置文件或交互式用戶界面。

有一種方法可以定位程序的類文件,但是這有點棘手,因為Java允許從可能位於遠程系統中的壓縮檔案中加載類。 最好以其他方式解決此問題。

使用絕對路徑

String master = "C:/Data/Customer.dat";
String trans = "C:/Data/Transactns.dat";
String newMaster = "C:/Data/Temp.txt";

該代碼對我有用,我想您可能拼錯了一些文件名,或者您的文件位於錯誤的文件夾中。 我在與src或項目相同的級別上創建了文件。 這也是檢查文件的文件夾。

嘗試這個:

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

要查看您的程序希望在哪個目錄中找到其輸入文件。 如果顯示正確的目錄,請檢查文件名的拼寫。 否則,您將了解發生了什么問題。

暫無
暫無

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

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