我制作了一个程序,它应该创建一个文件,写入它,然后从中读取。问题来自readFile(),其中突然hasNext()未定义为Formatter?我以为
while (file.hasNext()) {
String a = file.next();
System.out.println(a);
只要文件中有东西,将其复制到a然后打印一个?我做错了什么?
import java.util.*;
import java.io.*;
class Oppgave3
{
public static void main(String[] args)
{
Kryptosystem a = new Kryptosystem();
a.createFile();
a.writeFile();
a.openFile();
a.readFile();
a.closeFile();
}
}
class Kryptosystem
{
public Kryptosystem(){}
Scanner keyboard = new Scanner (System.in);
private Formatter file;
private Scanner x;
public void createFile(){
try {
file = new Formatter("kryptFil.txt");
}
catch (Exception e) {
System.out.println("could not create file");
}
}
public void writeFile(){
System.out.println("what do you want to write");
String tekst = keyboard.nextLine();
file.format(tekst);
}
public void openFile() {
try {
x = new Scanner (new File("kryptFil.txt"));
}
catch (Exception e) {
System.out.println("something is wrong with the file");
}
}
public void readFile() {
while (file.hasNext()) {
String a = x.next();
System.out.println(a);
}
}
public void closeFile() {
file.close();
}
}
答案 0 :(得分:2)
你说:
哪里突然hasNext()未定义为Formatter?
请查看Formatter API,因为它会向您显示此类没有hasNext()
方法,并且您的Java编译器正确地告诉您相同的事情。同样,Scanner API会告诉您它实际上具有您需要的方法。
您在扫描程序中打开相同的文件,名为x
,这是您要用来从文件中读取的内容。所以解决方案是在Scanner变量上调用hasNext()
:
while (x.hasNext()) { // x, not file
String a = x.next();
System.out.println(a);
}
注意我不确定为什么要将文件打开第二时间并将其放入Formatter对象中。请澄清你的动机。我相信您希望使用此文件写入文件,但您肯定不会尝试使用它来读取文件,这是您hasNext()
尝试使用的内容。我认为你对使用哪种工具感到有些困惑。