创建,写入和读取文件java

时间:2014-11-15 16:13:26

标签: java file-io java.util.scanner

我制作了一个程序,它应该创建一个文件,写入它,然后从中读取。问题来自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();
  }

    }

1 个答案:

答案 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()尝试使用的内容。我认为你对使用哪种工具感到有些困惑。