我写了一个,我的思路是生成20000个不重复的随机数,然后读取这20000个随机数对应行的数据 import java.io.*; import java.util.*;public class ReadFile { public static void main(String[] args) throws Exception { TreeSet<Integer> set = new TreeSet<Integer>();
//首先生成20000个随机数到set中 int num = 0; while (true) { if (set.add((int) (Math.random() * 40000000))) { num++; } if (num == 20000) { break; } }
//根据set的数据读取响应的行数据 BufferedReader in = new BufferedReader(new FileReader("in.txt")); PrintWriter out = new PrintWriter(new FileWriter("out.txt")); for (int i = 0; i < 40000000; i++) { String str = in.readLine(); if (set.contains(i)) { out.println(str); } } in.close(); out.close(); } }
2.根据随机行号,按照从小到大的行号,读取指定行的内容
3.保存1.随即得到不重复的行号,需要System.currentTimeMillis()+Math.random 进行换算
2.既然是不重复的行号,就没必要排序
3.读取到map或者list的集合中,然后循环保存到file
import java.io.*;
import java.util.*;public class ReadFile
{
public static void main(String[] args) throws Exception
{
TreeSet<Integer> set = new TreeSet<Integer>();
//首先生成20000个随机数到set中
int num = 0;
while (true)
{
if (set.add((int) (Math.random() * 40000000)))
{
num++;
}
if (num == 20000)
{
break;
}
}
//根据set的数据读取响应的行数据
BufferedReader in = new BufferedReader(new FileReader("in.txt"));
PrintWriter out = new PrintWriter(new FileWriter("out.txt"));
for (int i = 0; i < 40000000; i++)
{
String str = in.readLine();
if (set.contains(i))
{
out.println(str);
}
}
in.close();
out.close();
}
}
有速度要求的,得建立索引,然后字节读,两者速度差10倍以上。