gpt4 book ai didi

java - 如何读取文件并使用这些文件创建两个新文件?

转载 作者:行者123 更新时间:2023-12-01 11:51:07 25 4
gpt4 key购买 nike

我必须阅读一份包含年度最佳女 Actor 和电影的文件。然后我使用该文件创建两个新文件,一个包含年份和女 Actor ,另一个包含年份和电影。文件是这样的:

2002  Nicole Kidman   
The Hours
2003 Charlize Theron
Monster
2004 Hilary Swank
Million Dollar Baby
2005 Reese Witherspoon
Walk the Line
2006 Helen Mirren
The Queen
2007 Marion Cotillard
La Vie en Rose
2008 Kate Winslett
The Reader
2009 Sandra Bullock
The Blind Side
2010 Natalie Portman
The Black Swan

这是我到目前为止所拥有的:

    import java.io.*;
import java.util.*;
public class BestActress{
public static void main(String[] args)throws FileNotFoundException{
Scanner input = new Scanner(System.in);
Scanner reader = new Scanner(new File("BestActress.txt"));
while(reader.hasNextLine()){
int yearNumber=reader.nextInt();
String text=reader.nextLine();
actressLine(text, yearNumber);
String textt=reader.nextLine();
movieLine(textt, yearNumber);
}
}

public static void actressLine(String text, int year)throws FileNotFoundException{
PrintWriter writer = new PrintWriter(new File("YearBestActresses.txt"));
Scanner data = new Scanner(text);
while (data.hasNext()){
String actressName=data.nextLine();
writer.println(year+actressName);
writer.close();
}
}
public static void movieLine(String textt, int year)throws FileNotFoundException{
PrintWriter writer = new PrintWriter(new File("YearBestActresMovies.txt"));
Scanner data=new Scanner(textt);
while(data.hasNext()){
String movieName=data.nextLine();
writer.println(year+" "+movieName);
writer.close();
}
}

}

创建的文件仅显示去年,即 2010 年娜塔莉·波特曼和 2010 年《黑天鹅》。

最佳答案

您的程序有几个问题。

首先,每个方法在收到一行文本时,打开一个写入器,写入字符串的内容,然后关闭写入器。

默认情况下,打开写入器会清除文件。如果其中有在先前迭代中写入的数据,则会将其删除。此外,打开和关闭是繁重的操作,应该只在需要时才进行。

您应该做的是在进入 main 中的读取循环之前打开两个文件进行写入,并将 writer 对象作为参数传递给您的方法。然后在方法中您只需将一行写入文件即可。

循环结束后关闭这两个文件。所有这一切最好通过try with resources来完成。构造。

其他问题:

  • 您实际上并不需要对传递给该方法的数据项创建扫描器。你可以直接写给作者。
  • 主程序中的读取循环很危险。它检查是否有下一行,然后读取两行。如果只有下一行怎么办?有两种主要策略可以解决这个问题:
    1. 将第二次读取放入 if ( reader.hasNextLine() ) 中。这确保了还有下一行。
    2. 保留一个标志( boolean 值),告诉您当前正在读取年份和女 Actor 台词还是电影台词,并且每轮仅读取一行。如果标志告诉您这是第一个,请将其保存在变量中。如果是第二个,就两个都写。请记住在每行之后更改标志。

关于java - 如何读取文件并使用这些文件创建两个新文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28816193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com