我正在制作这个程序,它应该从输入文件中读取,然后创建一个输出文件。
输入文件(portlandvip2.txt):
法院50
10箱俱乐部25
流氓康威10盒子
Loretta Barrett 3 Court
洛拉斯·提利尔5俱乐部
玛格丽·提利尔8盒子
Roslin Frey 2 Box
珊莎·史塔克2俱乐部
雪诺5俱乐部
艾德慕·徒利3盒子
乔佛里·拜拉席恩第20宫
史坦尼斯·拜拉席恩4俱乐部
詹姆·兰尼斯特2盒子
瑟曦·兰尼斯特1宫廷
Beric Dondarrion 8 Court
巴隆·葛雷乔伊16盒子
奥莲娜·提利尔4宫廷
梅斯·提利尔5盒子
提利昂·兰尼斯特2俱乐部
桑铎·克里冈2宫廷
格雷果·克里冈6俱乐部
山姆威尔·塔利3俱乐部
派提尔·贝里席6宫廷
下面是输出文件的示例(portland2out.txt):
法院50美元
$10
俱乐部25美元
流氓康威$100
Loretta Barrett $150.00
我遇到的问题是,所有的输出文件打印是Petyr Baelish。
这是目前为止的程序:
import java.util.Scanner;
import java.io.*;
import java.io.Writer;
public class WebberProject2
{
public static void main(String[] args) throws IOException
{
Scanner inputFile = new Scanner(System.in);
File inputScanner = new File("portlandvip2.txt");
Scanner scanner = new Scanner(new File("portlandvip2.txt"));
while(scanner.hasNext())
{
String firstName = scanner.next();
String lastName = scanner.next();
PrintWriter outputFile = new PrintWriter("portland2out.txt");
outputFile.println(" " + firstName + " " + lastName);
scanner.nextLine();
inputFile.close();
outputFile.close();
}
}
}
在循环中打开和关闭输出文件,每次执行循环时重写一行。将printwwriter及其close()方法置于循环之外。此外,还有其他资源也在循环中被关闭。试试这个方法:
// ...
Scanner inputFile = new Scanner(System.in);
File inputScanner = new File("portlandvip2.txt");
Scanner scanner = new Scanner(new File("portlandvip2.txt"));
PrintWriter outputFile = new PrintWriter("portland2out.txt");
while(scanner.hasNext())
{
String firstName = scanner.next();
String lastName = scanner.next();
outputFile.println(" " + firstName + " " + lastName);
scanner.nextLine();
}
outputFile.close();
inputFile.close();
scanner.close();
// ...
您的代码看起来不完整。While循环未关闭。此外,您正在关闭循环内的文件,这将引发异常。使用以下代码作为基础,并根据您的需求进行调整。例如,使用Scanner方法nextInt()读取数字令牌,并在写入输出文件时在它们前面加上$ sign。
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class TestScanner{
public static void main(String[] args)
{
Scanner scanner = null;
PrintWriter outputFile = null;
try{
scanner = new Scanner(new File("portlandvip2.txt"));
outputFile = new PrintWriter("portland2out.txt");
String firstName, lastName;
int num = 0;
while(scanner.hasNext())
{
firstName = scanner.next();
if(scanner.hasNextInt()){
num = scanner.nextInt();
}
lastName = scanner.next();
outputFile.println(" " + firstName + " " + lastName + " $ " + num);
scanner.nextLine();
}
}catch(IOException e){
System.out.println("exception:"+e);
}finally{
scanner.close();
outputFile.close();
}
}
}