从文件写入和读取的问题

时间:2014-06-08 22:13:03

标签: java bufferedreader

我处在这样一种情况:我想写一些东西(用打孔和打孔写出员工的详细信息)到一个文件中并将其读回(以显示所有员工穿孔和打孔的人的报告)。

package Test;

 import java.io.*;
 import java.text.*;
 import java.util.*;
 public class Test {

public static void main(String[] args) throws IOException {
    String lastName = "";
    String firstName = "";
    String choice = "y";
    String customerChoice = "x";
    int empid = 0;
    Scanner sc = new Scanner(System.in);

    int currentIndex;

    File file = new File("E:/output.txt");
    FileWriter fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    int[] punchedArray;
        punchedArray = new int[100];

   // System.out.println(t);
    while (!customerChoice.equalsIgnoreCase("d") && customerChoice != "invalid" && choice.equalsIgnoreCase("y")) {
        customerChoice = getValidCustomerChoice(sc);
        if (customerChoice.equalsIgnoreCase("a")) {
           // System.out.println("In Create Customer");
            System.out.print("Enter your first name: ");

                firstName = sc.next();
                System.out.print("Enter your last name: ");
                lastName = sc.next();
                System.out.println(firstName + lastName + "with employee id" + empid);
                //System.out.println(firstNameArray[newEmployeeIndex] + " " + lastNameArray[newEmployeeIndex] + " your employee ID is: " + employeeIDArray[newEmployeeIndex]);
                empid++;

            //sc.next();
        }
        if (customerChoice.equalsIgnoreCase("b")) {
            System.out.println("Welcome to the punch in/out screen"+"\n");
                System.out.print("Enter your employee ID: ");
                currentIndex = Integer.parseInt(sc.next());

                if (punchedArray[currentIndex] == 0)
                {
                    System.out.println("You are now punched in");
                    punchedArray[currentIndex] = 1;

                }
                else if (punchedArray[currentIndex] == 1)
                {
                    System.out.println("You are now punched out");
                    punchedArray[currentIndex] = 0;
                }
               System.out.print(firstName + " "+ lastName + " "+ "your employee ID is " + currentIndex + " and your clock date and time is: " + " "+ cal.getTime() +"\n");
               String content = firstName + lastName + empid + cal.getTime();
               bw.write(content);
               bw.newLine();
               bw.close();
        }

        if (customerChoice.equalsIgnoreCase("c")) {
            System.out.print("Welcome to the report screen." + "\n");
            System.out.print("Enter your selection (I = individual report or A= all employees):" + "\n");
            customerChoice = sc.next();
            if (customerChoice.equalsIgnoreCase("i")) {
                System.out.println("In Individual Report");
            } else if (customerChoice.equalsIgnoreCase("a")) {
                System.out.println("In Consoldated Report");
            }
        }
        if(customerChoice.equalsIgnoreCase("d"))
        {
        //bw.close();
            break;
        }

    }
}

public static String getValidCustomerChoice(Scanner sc) {
    String customerChoice = "";
    // sc.nextLine();

    boolean isValid = false;
    int invalidCounter = 0;
    System.out.print("Enter your selection (a= Add New Employee, b = Punch in/out, c= Report, d = Exit):");
    while (isValid == false && invalidCounter < 3) {

        customerChoice = sc.next();
        if (!customerChoice.equalsIgnoreCase("a")
                && !customerChoice.equalsIgnoreCase("b") && !customerChoice.equalsIgnoreCase("c") && !customerChoice.equalsIgnoreCase("d") && !customerChoice.equalsIgnoreCase("I") && !customerChoice.equalsIgnoreCase("A")) {
            System.out.println("Invalid choice. Try again.\n");
            invalidCounter++;
        } else {
            isValid = true;
        }
        sc.nextLine();
    }
    if (invalidCounter >= 3) {
        System.out.println("Invalid three times. Program Exiting.\n");
        return "invalid";
    }
    return customerChoice;
}

}

在第[75]行bw.write(content)我正在写一个名为“output.txt”的文件(我还想为我写入文件的那些员工添加时间戳)。但不知何故,数据不会进入文件,我确信我在关闭它的某个地方犯了一个错误,我想从我写的同一个文件中读取。有人可以建议我哪里出错了吗?

添加更多详情:

    run:
    Enter your selection (a= Add New Employee, b = Punch in/out, c= Report, d = Exit):a
    Enter your first name: Sa
    Enter your last name: Ka
    SaKawith employee id0
    Enter your selection (a= Add New Employee, b = Punch in/out, c= Report, d = Exit):b
    Welcome to the punch in/out screen

    Enter your employee ID: 0
    You are now punched in
    Sa Ka your employee ID is 0 and your clock date and time is:  Sun Jun 08 20:19:42 EDT 2014
    Enter your selection (a= Add New Employee, b = Punch in/out, c= Report, d = Exit):a
    Enter your first name: Ka
    Enter your last name: Ma
    KaMawith employee id1
    Enter your selection (a= Add New Employee, b = Punch in/out, c= Report, d = Exit):b
    Welcome to the punch in/out screen

    Enter your employee ID: 1
    You are now punched in
    Ka Ma your employee ID is 1 and your clock date and time is:  Sun Jun 08 20:19:42 EDT 2014
    Enter your selection (a= Add New Employee, b = Punch in/out, c= Report, d = Exit):c
    Welcome to the report screen.
    Enter your selection (I = individual report or A= all employees):
    a
    In Consoldated Report
    Enter your selection (a= Add New Employee, b = Punch in/out, c= Report, d = Exit):BUILD STOPPED (total time: 1 minute 8 seconds)

所以,当我现在去我的Pc的E驱动器时,我只看到一个名为output.txt的文件(最新修改时间),但它没有任何内容。我试图在循环后关闭我的缓冲区,但没有运气。另外,请告知阅读我写入文件的数据

请指教!

由于

3 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题,但是像这样,你只能写一次文件,因为你写完之后关闭它。相反,您可以使用flush()方法来确保将内容写入文件。

请考虑阅读http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html上的文档。

答案 1 :(得分:0)

在我的测试中,它工作正常。但改变bw.close();到bw.flush();因为输出流将在第一次输入后关闭。并且第二个输入你有例外

答案 2 :(得分:-1)

立即开始我建议尝试用E:\output.txt替换您的文件名。我相信Windows文件路径使用反斜杠。