Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BufferedReader行为奇怪_Java_File_Bufferedreader - Fatal编程技术网

Java BufferedReader行为奇怪

Java BufferedReader行为奇怪,java,file,bufferedreader,Java,File,Bufferedreader,我一辈子都不明白bufferedreader为什么不读我文件的下一行。它不断返回一个空字符串。我以正确的格式将阅读器放入while循环中。我的文本文件不包含任何特殊字符。它只包含数字和一些由空格分隔的字符串。我不明白 //Read from file method public void readFile(File x) throws IOException{ File rFile = x; String fileLine; Transaction holder;

我一辈子都不明白bufferedreader为什么不读我文件的下一行。它不断返回一个空字符串。我以正确的格式将阅读器放入while循环中。我的文本文件不包含任何特殊字符。它只包含数字和一些由空格分隔的字符串。我不明白

//Read from file method
public void readFile(File x) throws IOException{
    File rFile = x;
    String fileLine;
    Transaction holder;
    int Type;
    //This will destroy the current account to add in the new one
    //Main.$acct.destroyTrans();

    try {
        // FileReader reads text files in the default encoding.
        FileReader fileReader = new FileReader(rFile);

        // Always wrap FileReader in BufferedReader.
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        //Gathering initial information about account
        Main.$acct.setName(bufferedReader.readLine());
        Main.$acct.setBalance(Double.parseDouble(bufferedReader.readLine()));
        Main.$acct.setTransCount(Integer.parseInt(bufferedReader.readLine()));
        Main.$acct.setSC(Double.parseDouble(bufferedReader.readLine()));
        //Adding the objects
        while((fileLine = bufferedReader.readLine()) != null) {
            //Tokenize the String to extract information
            StringTokenizer st = new StringTokenizer(fileLine," ");          
            //Go through each token and put it into an arrayList
            ArrayList<String> list = new ArrayList();
            while(st.hasMoreTokens()) {
                list.add(st.nextToken());
            }
            //Grab each piece of data
            Type = Integer.parseInt(list.get(0));
            //Route the proper objects to their proper places
            switch(Type){
                case 1:
                {
                holder = new Check(Integer.parseInt(list.get(1)), Type,  Double.parseDouble(list.get(3)), Integer.parseInt(list.get(2)));
                Main.$acct.addNewTrans(holder);
                break;
                }
                case 2:
                {
                holder = new Deposit(Integer.parseInt(list.get(1)), Type, Double.parseDouble(list.get(5)), Double.parseDouble(list.get(3)),
                Double.parseDouble(list.get(4)));
                Main.$acct.addNewTrans(holder);
                break;
                }
                case 3:
                {
                holder = new Transaction(Integer.parseInt(list.get(1)), Type, Double.parseDouble(list.get(4)));
                Main.$acct.addNewTrans(holder);
                break;
                }
                default:
                {}  
            }
            //End of switch
        }
        //End of while loop

        bufferedReader.close();
    }  
    //End of Try
    //Exception handling portion
    catch(FileNotFoundException ex) {
        System.out.println(
            "Unable to open file '" +
            rFile.getName() + "'");               
    }
    catch(IOException ex) {
        System.out.println(
            "Error reading file '"
            + rFile.getName() + "'");                 
        // Or we could just do this:
        // ex.printStackTrace();
    }
}
//从文件读取方法
公共void readFile(文件x)引发IOException{
文件rFile=x;
字符串文件行;
交易持有人;
int型;
//这将销毁当前帐户以添加新帐户
//Main.$acct.trans();
试一试{
//FileReader以默认编码读取文本文件。
FileReader FileReader=新的FileReader(rFile);
//始终将文件读取器包装在BufferedReader中。
BufferedReader BufferedReader=新的BufferedReader(文件阅读器);
//收集有关帐户的初始信息
Main.$acct.setName(bufferedReader.readLine());
Main.$acct.setBalance(Double.parseDouble(bufferedReader.readLine());
Main.$acct.setTransCount(Integer.parseInt(bufferedReader.readLine());
Main.$acct.setSC(Double.parseDouble(bufferedReader.readLine());
//添加对象
而((fileLine=bufferedReader.readLine())!=null){
//标记字符串以提取信息
StringTokenizer st=新的StringTokenizer(文件行“”);
//检查每个令牌并将其放入arrayList中
ArrayList=新建ArrayList();
而(st.hasMoreTokens()){
添加(st.nextToken());
}
//抓取每一条数据
Type=Integer.parseInt(list.get(0));
//将适当的物体布置到适当的位置
开关(类型){
案例1:
{
holder=newcheck(Integer.parseInt(list.get(1)),Type,Double.parseDouble(list.get(3)),Integer.parseInt(list.get(2));
主帐户$acct.ADDNETRANS(持有人);
打破
}
案例2:
{
holder=新存款(Integer.parseInt(list.get(1)),类型,Double.parseDouble(list.get(5)),Double.parseDouble(list.get(3)),
Double.parseDouble(list.get(4));
主帐户$acct.ADDNETRANS(持有人);
打破
}
案例3:
{
holder=新事务(Integer.parseInt(list.get(1)),类型,Double.parseDouble(list.get(4));
主帐户$acct.ADDNETRANS(持有人);
打破
}
违约:
{}  
}
//开关末端
}
//while循环结束
bufferedReader.close();
}  
//尝试结束
//异常处理部分
捕获(FileNotFoundException ex){
System.out.println(
“无法打开文件”+
rFile.getName()+“'”);
}
捕获(IOEX异常){
System.out.println(
“读取文件“”时出错”
+rFile.getName()+“'”);
//或者我们可以这样做:
//例如printStackTrace();
}
}
示例文件:

比利

五百

四,

五,

101100

3.1 Srv。Chrg。0.15

2存款100 200


只要输入文件格式和编码是标准的,代码就可以正常运行。 确保输入文件没有多余的换行符(或文件末尾有额外的换行符); 我用ANSI编码的文件测试了你的代码,它按预期工作

修复您的异常处理以处理一般情况-它将帮助您调试错误

i、 e.在方法末尾执行类似操作:

} catch(Exception e) {
    // Throw the exception here, or print it to the console...
    e.printStackTrace();
}

祝你好运

共享您的文件示例。不要依赖于
文件阅读器的默认编码,这是一个正在底部咬您的bug。请创建一个!!!这组代码(格式非常糟糕)太多,无法分析。您需要向我们显示错误的确切位置,因为我运行了示例文件,它似乎工作得很好。好的,我和我的教授解决了这个问题。在这段代码中没有看到,我有一个toString()方法,可以写出每个account类的信息,在toString()的末尾有一个“\n”,我还使用了一个bufferedReader.newLine()。因此该文件有两个“\n”,因此它无法读取超过第一行的内容……Doh!