2012-04-23 3 views
1

Я учусь в финал, и я пытаюсь сделать следующее:Строковых и текстовые файлы Java

Откройте файл nFile и напечатать строку, которая соответствует номеру строки начать строки с номером отделкой, в имя файла.

Должен обрабатывать сообщение об ошибке, если номер строки запуска или завершения не существует, должна печатать строку «Строка не найдена», если происходит событие IOException, метод должен печатать «Ошибка ввода-вывода».

Я использую текстовый файл со следующим:

11 
1c20 
203 
G2 

Если 2,4 введен, "1c20 203 G2". будет напечатано

Я много исследовал, и я застреваю при печати строк при вводе номера строки.

import java.io.*; 

public class files { 
public void dR(String nFile, int start, int finish)  
{ 
     try{     
       FileInputStream fstream = new FileInputStream("C://rest//dat.txt"); 

       // Get the object of DataInputStream 
       DataInputStream in = new DataInputStream(fstream); 
       BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

       nameFile=null; 
       start=0; 
       finish=0; 
       // if start is greater or = to 1 and finish less than 4 
       while((nFile=br.readLine())!=null && start>= 1 && finish <= 4) 
       { 
        for(int i=0; i<=start; i++) 
        { 
         System.out.println(nFile); 
         br.close(); 
        } 
        System.out.println("that doesnt exsist"); 
        }    
     } 
      catch(IOException e) 
      { 
       System.out.println("there is an IO error");     
      } 
     } 
    } 
+0

Финалы чего? Вы не придерживаетесь соглашений об именах? Похож на новичка. nameFile не объявлен - разве у вас нет компилятора? Начало и конец передаются как параметр, но вы перезаписываете их 0 - почему? Что означает dR? –

ответ

4

вы выбрасывая все входные данные вы получите от параметра

int linenb=1;//this will hold the current line number 
while((nFile=br.readLine())!=null){ 
    if(linenb>=start&&linenb<=finish) 
     System.out.println(nfile); 
    linenb++; 
} 
if(linenb<=finish) 
    System.out.println("Line not found"); 

также добавить, наконец, блок, который будет делать близкие

+0

голосование и принятый ответ спасибо! : D –

0

Ну, в первую очередь, вы не используете nFile параметра (подсказка: это имя файла Угадайте, куда он должен идти в свой код ....), И в этих двух направлениях:

start=0; 
finish=0; 

Вы просто потеряли параметры, которые были предоставлены вам.

Вместо этого я хотел бы сделать новую переменную

int index = 0; 

приращение его с каждой новой строки, и если он находится между стартом и финишем, распечатайте линии.

Вам еще нужно «прочитать» строки, которые есть до start, чтобы иметь возможность подсчитать, на какой линии вы находитесь.

1

что-то вроде этого?

for (int i=1 ; (nFile=br.readLine())!=null; i++) 
{ 
if (start>= i && finish <= i) 
{ 
    System.out.println(nFile); 
} 
} 
br.close(); 
+0

Спасибо, что не работает, потому что int == 1 недействителен? –

+0

Извините, ошибка ввода, теперь она исправлена. (i = 1) –

0
import java.io.*; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class printStrings 
{ 
    public static void main (String[] args) 
    { 
     Scanner in = new Scanner (System.in); 

     int start = in.nextInt(); 
     int stop = in.nextInt(); 

     ArrayList<String> strings = new ArrayList<String>(); 
     String line = null; 
     BufferedReader buff = null; 
     try 
     { 
      buff = new BufferedReader (new InputStreamReader (new FileInputStream ("data.txt"))); 
      while ((line = buff.readLine()) != null) 
      { 
       strings.add (line); 
      } 
     } 
     catch (Exception e) 
     { 
      System.err.println ("IO Error"); 
      System.exit (-1); 
     } 
     finally 
     { 
      try 
      { 
       buff.close(); 
      } 
      catch (IOException e2) {} 
     } 

     if (start < 1 || start > strings.size() || stop < 1 || stop > strings.size() || start > stop) 
     { 
      System.err.println ("Line not found"); 
      System.exit (-2); 
     } 

     for (int i = start - 1; i < stop; i++) 
     { 
      System.out.println (strings.get (i)); 
     } 
    } 
} 
Смежные вопросы