随机读取文档中一行数据

需求

按照每行数据读取文件,然后随机获取其中一行

步骤

1.读文件,读成字符串集合

2.生成随机数,随机数应该对应集合的下标

3.根据随机数随机读取一行

代码

package com.lianxi1019;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Random;

public class ReadOneLine {
  public static void main(String[] args) throws IOException {
      
    Path path = Paths.get("D:", "100", "200", "3c.txt");
    // 注意是Paths,有s。注意不要写成“D:\100\200”这样的,严格的讲不用斜杠,虽然也能用
      
    List<String> list = Files.readAllLines(path, StandardCharsets.UTF_8);
      
    // JDK1.8以后可以省略第二个参数,默认是UTF-8编码
    // 获取集合大小
    int size = list.size();
    // 获取随机数
    int i = new Random().nextInt(size);
    // 得到一行
    String str = list.get(i);
    // 输出
    System.out.println("str = " + str);
  }
}

笔记

得到一个需求的时候,重点应该是分解需求,也就是说在需求分析阶段做更多的工作,而写代码则是一个熟悉的过程。

用到的是:Files + Path

Files工具类,基于Path

Path是代替以前的File类

readAllLines方法适合小文件,如果文件太大就会发生OOM,即内存溢出错误。

这里拓展一下获取随机数的2种方法:

//取随机数0~9;
//1. 
Random ra=new Random(); 
int a=ra.nextInt(10); 
//2.
int number=(int)Math.random()*10;

还有Files.copy()和Files.move()方法,注意方法是原子化操作,即要么全做,要么不做。

posted @ 2022-02-16 10:38  Charles博客  阅读(252)  评论(0编辑  收藏  举报