Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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 BufferReader使用以前的信息写入新文件_Java_File Io_Bufferedreader - Fatal编程技术网

Java BufferReader使用以前的信息写入新文件

Java BufferReader使用以前的信息写入新文件,java,file-io,bufferedreader,Java,File Io,Bufferedreader,这是我的代码的基础。它在控制台上打印学生成绩,但如何使用BufferReader将所有学生成绩放在新文件中 import java.io.*; import java.util.InputMismatchException; import java.lang.*; import java.util.*; public class WorkSpace { private Scanner x; public void openFile(){ try{

这是我的代码的基础。它在控制台上打印学生成绩,但如何使用BufferReader将所有学生成绩放在新文件中

import java.io.*;
import java.util.InputMismatchException;
import java.lang.*;
import java.util.*;

public class WorkSpace {

private Scanner x;

    public void openFile(){
        try{
            x = new Scanner (new File ("grades.txt"));
        }
        catch(Exception e){
            System.out.println("could not find file");
        }}



    public void createFile()throws IOException {


        try{
            File file = new File("grades.txt");
            Scanner s = new Scanner(file);




        while(s.hasNext()){
        {
            String [] split = s.nextLine().split(", ");

            String fname = split[0];

            Double q1 = Double.parseDouble (split[1]);
            Double q2 = Double.parseDouble (split[2]);
            Double q3 = Double.parseDouble (split[3]);
            Double q4 = Double.parseDouble (split[4]);
            Double proji = Double.parseDouble (split[5]);
            Double projii = Double.parseDouble (split[6]);
            Double projiii = Double.parseDouble (split[7]);

            double studentgrade = (q1 *0.1) + (q2 *0.1) +(q3 *0.1) + (q4 *0.1) +(proji*0.15) + (projii * 0.2) + (projiii *0.25);
            if(studentgrade>90)
                System.out.printf("%s got an A\n", fname);
            else if(studentgrade>80)
                System.out.printf("%s got a B\n", fname);
            else if(studentgrade>70)
                System.out.printf("%s got a C\n", fname);
            else if(studentgrade>60)
                System.out.printf("%s got a D\n", fname);
            else if(studentgrade>50)
                System.out.printf("%s got a F\n", fname);


        }}}catch(Exception e){
            e.printStackTrace();
        }



    }
    public void closeFile(){
        x.close();
    }

您读取文件的方式不正确。使用扫描仪读取文件的最常见方式:

另外,
scanner.nextInt()
不会返回文件的长度。这就是问题所在。使用
file.length
获取文件的长度。

Scanner.nextInt()返回从源读取的下一个整数值(不是源长度或其他内容)。打开文件并尝试读取开头的整数,但文件不是以整数开头的,因此会出现异常。

您的问题没有意义
BufferedReader
不写入文件。它,呃,读取文件。你想要的是,呃,一个
BufferedWriter.

你得到了什么错误?在java.util.Scanner.throwFor(Scanner.java:909)在java.util.Scanner.next(Scanner.java:1530)在java.util.Scanner.nextInt(Scanner.java:2160)在java.util.Scanner.nextInt(Scanner.java:2119)在java.util在上面Project3.main(Project3.java:15)的ReadFile.ReadFile(ReadFile.java:22)中,Project3类没有调用ReadFile()。你在哪里犯的错误?为项目提供适当的堆栈跟踪。如何在仍然能够解析所有字符串/双精度的情况下解决此问题?首先,删除int numTimes=file.nextInt()。然后将for循环更改为while循环,如11年前的javaguy示例中所示。改变他的字符串next=s.next();字符串[]split=file.nextLine().split(“”);然后像以前一样对split进行操作。一旦我这样做了,我如何继续使用for循环?这是什么样的错误?你能打印堆栈跟踪吗?你的grades.txt文件是什么样子的呢?java.lang.NumberFormatException:对于输入字符串:“100”,在sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)在java.lang.Double.parseDouble(Double.java:540)在ReadFile.ReadFile(ReadFile.java:35)在Project3.main(Project3.java:15)看起来你把它改成了while循环!请投票?

try{
File file = new File("Your/File/Path");
Scanner s = new Scanner(file);
s.useDelimiter("\n");//splits the whole file's text by "\n"
while(s.hasNext()){
String next = s.next();
//parse your stuff
}
s.close();
}catch(Exception e){}