package org.ccid.test;import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List;/** * @user: Administrator * @author: yougang * @version:1.0 * @created:Jan 6, 2011 */public class ReadName { public static void main(String[] args) throws Exception{ FileInputStream fileRead = new FileInputStream(new File("D:\\name.txt")); InputStreamReader inputStreamReader = new InputStreamReader(fileRead,"UTF-8"); BufferedReader buffer = new BufferedReader(inputStreamReader); String tempStr = ""; List list = new ArrayList(); System.out.println("所有人名如下:"); while((tempStr=buffer.readLine())!=null) { System.out.println(tempStr); list.add(tempStr); } System.out.println("-------------------------");
//每次随机删除三个人名 System.out.println("删除的人名如下:"); for (int i = 0; i < 3; i++) { int tempIndex = (int)(Math.random()*4); System.out.println(list.get(tempIndex)); list.remove(tempIndex); } System.out.println("--------------------------"); System.out.println("剩下的人名如下:"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
如果文本文件是无序文件,并且,是小文件, 可以先将所有人名读出,取出数据,然后回写到新文件中,替换原有文件。 文件中的人名,有可能是重复的。final String FileName = "namse.txt";//保存人名的文件名称。 final int NamesCount = 5;//待取出的人名数量。 TreeMap<Integer,String> result = new TreeMap<Integer,String>();//取出的人名。 File file = new File(FileName); File tmp = File.createTempFile("names_tmp","txt"); ArrayList<String> names = new ArrayList<String>(); BufferedReader reader = new BufferedReader(new FileReader(file)); BufferedWriter writer = new BufferedWriter(new FileWriter(tmp)); String line = null; while((line = reader.readLine())!=null){ names.add(line.trim()); } reader.close(); HashSet<Integer> indexes = new HashSet<Integer>(); Random rand = new Random(); while(NamesCount>indexes.size()){ indexes.add(rand.nextInt(names.size()); } for(Iterator<Integer> itr = indexes.iterator();itr.hasNext();){ int index = itr.nex(); result.put(index,name.remove(index)); } for(String name : names){ writer.write(name);writer.newLine(); } writer.close(); file.delete(); tmp.renameTo(file); //打印随机取出的人名和序号。 for(Iterator<Map.Entry<Integer,String>> iter = result.entrySet().iterator(); iter.hasNext();){ Map.Entry<Integer,String> e = iter.next(); System.out.println(e.getValue()+"\t"+e.getKey()); } 上述代码未经测试,谢谢。
a.get输入流 通过readline();把数据独到数组中
随机从数据中去数字,根据 数组的长度通过new Random()取道下表
然后去数组中取值 并且删除..
写剩余数到数组
当删除人名的时候,不是直接把它从文件中删除,而是使用RandomAccessFile修改此标志为已经删除.操作文件的都是流,如果向文件的中间部分添加了内容,如果想在要此位置后面的内容都还存在,必须把此后面的内容重新再向文件里再写一次,不会自动向后移动的。
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;/**
* @user: Administrator
* @author: yougang
* @version:1.0
* @created:Jan 6, 2011
*/public class ReadName {
public static void main(String[] args) throws Exception{
FileInputStream fileRead = new FileInputStream(new File("D:\\name.txt"));
InputStreamReader inputStreamReader = new InputStreamReader(fileRead,"UTF-8");
BufferedReader buffer = new BufferedReader(inputStreamReader);
String tempStr = "";
List list = new ArrayList();
System.out.println("所有人名如下:");
while((tempStr=buffer.readLine())!=null) {
System.out.println(tempStr);
list.add(tempStr);
}
System.out.println("-------------------------");
//每次随机删除三个人名
System.out.println("删除的人名如下:");
for (int i = 0; i < 3; i++) {
int tempIndex = (int)(Math.random()*4);
System.out.println(list.get(tempIndex));
list.remove(tempIndex);
}
System.out.println("--------------------------");
System.out.println("剩下的人名如下:");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
可以先将所有人名读出,取出数据,然后回写到新文件中,替换原有文件。
文件中的人名,有可能是重复的。final String FileName = "namse.txt";//保存人名的文件名称。
final int NamesCount = 5;//待取出的人名数量。
TreeMap<Integer,String> result = new TreeMap<Integer,String>();//取出的人名。
File file = new File(FileName);
File tmp = File.createTempFile("names_tmp","txt");
ArrayList<String> names = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new FileReader(file));
BufferedWriter writer = new BufferedWriter(new FileWriter(tmp));
String line = null;
while((line = reader.readLine())!=null){
names.add(line.trim());
}
reader.close();
HashSet<Integer> indexes = new HashSet<Integer>();
Random rand = new Random();
while(NamesCount>indexes.size()){
indexes.add(rand.nextInt(names.size());
}
for(Iterator<Integer> itr = indexes.iterator();itr.hasNext();){
int index = itr.nex();
result.put(index,name.remove(index));
}
for(String name : names){
writer.write(name);writer.newLine();
}
writer.close();
file.delete();
tmp.renameTo(file);
//打印随机取出的人名和序号。
for(Iterator<Map.Entry<Integer,String>> iter = result.entrySet().iterator();
iter.hasNext();){
Map.Entry<Integer,String> e = iter.next();
System.out.println(e.getValue()+"\t"+e.getKey());
}
上述代码未经测试,谢谢。