我的任务如下:
编写一个程序,读取附加的文本文件并写出一个单独的文本文件(使用您的第一个名字和姓氏作为文件名)。新文本文件应包含与输入文件相同的所有文本行,并添加行号作为行上的第一个字符。
例如:如果您的输入行显示:
这是一个测试
你的输出应该是
- 这是一个测试
醇>
我写过我认为主要是功能代码 - 在运行它时编译并创建一个要写入的新文件,但该文件为空(包含0个字节)。阅读问题,我尝试确保我的printWriter和输入/输出流已关闭/刷新。我现在还不确定我的循环是否有问题,或者我是否在错误的位置调用close方法。任何帮助表示赞赏。
代码如下:
package module6lecture;
import java.util.Scanner;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class ReadWriteProgram {
public static void main(String[] args) {
try
{
FileInputStream fis = new FileInputStream("C:\\Users\\Reid\\Desktop\\Chapter11.txt");
FileOutputStream fos = new FileOutputStream("C:\\Users\\Reid\\Desktop\\rulicny.txt");
Scanner scan = new Scanner(fis);
PrintWriter pw = new PrintWriter(fos);
int lineNumber = 1;
while(scan.hasNextLine());
{
String stringRead = scan.nextLine();
pw.println(lineNumber + ": " + stringRead);
lineNumber++;
}
pw.close();
}
catch(FileNotFoundException fnf)
{
System.out.println("Unable to find Chapter11.txt. Exiting...");
fnf.printStackTrace();
}
}
}
免责声明:我是新手。
答案 0 :(得分:1)
循环后有分号
while(scan.hasNextLine());
// ^
这使得它成为无限循环,因为它表示空指令,就像
一样while(scan.hasNextLine()){}
所以你永远不会真正进入
{
String stringRead = scan.nextLine();
pw.println(lineNumber + ": " + stringRead);
lineNumber++;
}
阻止,然后是代码,这意味着你没有在结果文件中写任何东西而你甚至都没有关闭它。如果用
创建空文件,那么你就拥有了FileOutputStream fos = new FileOutputStream("C:\\Users\\Reid\\Desktop\\rulicny.txt");
请删除此分号。
顺便说一句,如果你想让你的IDE格式代码,你可以很容易地发现这种错误。 Eclipse将我的示例格式化为
while (scan.hasNextLine())
;
{
String stringRead = scan.nextLine();
pw.println(lineNumber + ": " + stringRead);
lineNumber++;
}
如你所见,你的循环实际上执行空语句而不是代码块是非常好的。
答案 1 :(得分:0)
尝试在循环之外预定义String stringRead
。