1

我正在为期末考试而学习,我正在尝试做以下事情:

打开文件 nFile,并在文件名 File 中打印对应于行号 start 到行号 finish 的字符串。

当行号开始或结束不存在时必须处理错误消息,如果发生IOException,应打印字符串“找不到行”,该方法应打印“IO错误”。

我正在使用具有以下内容的文本文件:

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");                
            }
        }
    }
4

4 回答 4

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"); 

还添加一个 finally 块来完成关闭

于 2012-04-23T20:25:03.070 回答
1

像这样的东西?

for (int i=1 ; (nFile=br.readLine())!=null; i++) 
{
 if (start>= i && finish <= i)
 {
  System.out.println(nFile);
 }
}
br.close();
于 2012-04-23T20:24:35.347 回答
0

好吧,首先,您没有使用nFile参数(提示:它是文件名。猜猜它应该在代码中的位置......),并且在这两行中:

start=0;
finish=0;

你只是丢失了给你的参数。

相反,我会创建一个新变量

int index = 0;

每增加一行,如果它在开始和结束之间,则打印出该行。

您仍然需要“阅读”之前的行start才能计算出您所在的行。

于 2012-04-23T20:24:02.767 回答
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));
        }
    }
}
于 2012-04-23T20:39:23.973 回答