2014-11-15 3 views
0

Я создал программу, которая должна создать файл, записать на него и затем прочитать его. Проблема возникает с readFile(), где вдруг hasNext() не определено для Formatter? Я думал, чтосоздание, запись и чтение из файлов java

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

Да, в то время как (x.hasNext()) {работал как шарм :) –

ответ

2

Вы состояние:

где внезапно hasNext() не определено для Formatter?

Пожалуйста, посмотрите на Formatter API, как он покажет вам, что этот класс не имеет hasNext() метод, и ваш Java компилятор правильно говорит вам то же самое. Аналогично, Scanner API покажет вам, что на самом деле у вас есть способ, который вам нужен.

Вы открываете тот же файл в сканере, который называется x, и это то, что вы хотите использовать для чтения из файла. Таким образом, решение заключается в вызове hasNext() на переменную Scanner:

while (x.hasNext()) { // x, not file 
    String a = x.next(); 
    System.out.println(a); 
} 

Примечание Я не знаю, почему вы открыли файл время второй и поместил его в объект Formatter. Просьба уточнить вашу мотивацию для этого. Я считаю, что вы хотите написать в файл с этим, но вы, конечно же, не попытаетесь использовать его для чтения из Файла, который пытается использовать то, что вы используете hasNext(). Я думаю, вы были немного озадачены тем, какой инструмент использовать - все.

Смежные вопросы