Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中读取txt文件中的特定行_Java_File Io_Io - Fatal编程技术网

在Java中读取txt文件中的特定行

在Java中读取txt文件中的特定行,java,file-io,io,Java,File Io,Io,文件ListeMot.txt包含336529行 如何抓住一条特定的线 这是我的密码 int getNombre() { nbre = (int)(Math.random()*336529); return nbre ; } public String FindWord () throws IOException{ String word = null; int nbr= getNombre(); InputStreamReader reader = null

文件ListeMot.txt包含336529行

如何抓住一条特定的线

这是我的密码

 int getNombre()
 {
   nbre = (int)(Math.random()*336529);
   return nbre ;
 }

public String FindWord () throws IOException{
   String word = null;
   int nbr= getNombre();
   InputStreamReader reader = null;
   LineNumberReader lnr = null;
   reader = new InputStreamReader(new FileInputStream("../image/ListeMot.txt"));
   lnr = new LineNumberReader(reader);
   word = lnr.readLine(nbr);
}
为什么我不能得到word=lnr.readLine(nbr)

谢谢


另外,我是爪哇的新手

要得到第n行,你必须阅读它前面的所有行

如果您多次这样做,最有效的方法可能是首先将所有行加载到内存中


private final List words=new ArrayList();
私有最终随机=新随机();
公共字符串randomWord()引发IOException{
if(words.isEmpty()){
BufferedReader br=新的BufferedReader(新的InputStreamReader(新文件InputStream(“../image/ListeMot.txt”));
弦线;
而((line=br.readLine())!=null)
添加(行);
br.close();
}
返回words.get(random.nextInt(words.size());
}

顺便说一句:参数
要使用的单词

在Java API中没有类似
readLine(int lineNumber)
的方法。您应该读取特定行号中前面的所有行。我已经操纵了你的第二种方法,看看它:

public void FindWord () throws IOException
{
    String word = "";
    int nbr = getNombre();
    InputStreamReader reader = null;
    LineNumberReader lnr = null;
    reader = new InputStreamReader( new FileInputStream( "src/a.txt" ) );
    lnr = new LineNumberReader( reader );

    while(lnr.getLineNumber() != nbr)
        word = lnr.readLine();

    System.out.println( word );
}
上面的代码不是没有错误的,因为我假设您知道给定文本文件中行号的限制,即,如果我们生成一个大于实际行号的随机数,代码将进入无限循环,请小心

另一个问题是,行号从1开始,因此我建议您更改随机行号生成器方法,如下所示:

int getNombre()
 {
   nbre = (int)(Math.random()*336529) + 1;
   return nbre ;
 }

只记录读取的行数,不允许对流中的行进行随机访问。

我看不出有参数“theWord”的意义,但甚至不要尝试在代码中使用它。。
int getNombre()
 {
   nbre = (int)(Math.random()*336529) + 1;
   return nbre ;
 }