论坛首页 入门技术论坛

一笔试小题---文件读写操作(希望对刚毕业找工作的朋友有所帮助)

浏览 32457 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-01-06  
一行shell脚本搞定
0 请登录后投票
   发表时间:2009-01-06  
不可以这样吗?
TreeMap<Integer,List> map=new TreeMap<Integer,List>();
integer保存数字,List保存名字+数字?
0 请登录后投票
   发表时间:2009-01-06  
andyao 写道
一行shell脚本搞定



呵呵 shell脚本贴出来学习下
0 请登录后投票
   发表时间:2009-01-06  
only_java 写道
不可以这样吗?
TreeMap<Integer,List> map=new TreeMap<Integer,List>();
integer保存数字,List保存名字+数字?


恩 应该可以   ,还有不用TreeMap排序的方法吗?用TreeMap还要自己定义个比较器
0 请登录后投票
   发表时间:2009-01-06   最后修改:2009-01-06
jiagyao 写道


only_java 写道
不可以这样吗?
TreeMap map=new TreeMap();
integer保存数字,List保存名字+数字?




恩 应该可以   ,还有不用TreeMap排序的方法吗?用TreeMap还要自己定义个比较器



import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

public class SortFile{
private Map<Integer,String> map;
private Set<Integer> set;

public SortFile(){
map=new HashMap<Integer,String>();
set=new TreeSet<Integer>();
}

public static void main(String[] args){
String filename = "D:/test1.txt";
String toFilename = "D:/test2.txt";
new SortFile().sortFile(filename, toFilename);
}

public void sortFile(String filename,String toFilename){
File file = new File(filename);
BufferedReader reader=null;
File toFile = new File(toFilename);
PrintWriter writer = null;
try {
    reader = new BufferedReader(new FileReader(file));
String tempString = null;
String[] ss = null;

while((tempString = reader.readLine()) != null){
ss = tempString.split(" ");
String value = ss[0];
Integer key=Integer.parseInt(ss[1]);
map.put(key,value);
set.add(key);
}

writer = new PrintWriter(new FileOutputStream(toFile));
for(Integer key : set){
String value=map.get(key);
writer.println(value+" "+key);
}
writer.flush();
}
catch (Exception ex) {
}
finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
writer.close();
}
}
}
0 请登录后投票
   发表时间:2009-01-06  
你好LZ,

首先, 老实说我不会JAVA。 所以我说的有可能是错的。
很不幸我认为你写的是错的。 
这里不应该用map map表达的是key 和 value的映射
注意key是唯一的是一种集合的概念。
(如果java中的map是一种dup map那算我没说.)
具体到你的问题文件中的内容应该保存在list里
之后的做法一般有2种
1. list中的元素是每行中的内容。 自定义比较方法每次比较时都去从这个string中解析那个int. 这种方法比较省事只要自己定义一个比较方法就可以了
2. 上一个方法有个比较明显的缺点是 每次比较都要解析一次字符串 效率较差。所以在list中可以保存每行内容和数值的一个pair. (java中好像没有内置的pair类型, 可以自己写一个, 不过几行代码的事。 或者直接使用元素为Object类型的list)

建议:
踏实一点不要 听LS几位的认为这是个API问题就不重视. 实际这事概念问题 :p
刚毕业打好基础很重要.
祝你好运
0 请登录后投票
   发表时间:2009-01-06  
cat intel.txt | sort -k2n > sun.txt
0 请登录后投票
   发表时间:2009-01-06  
icefishc 写道
你好LZ,

首先, 老实说我不会JAVA。 所以我说的有可能是错的。
很不幸我认为你写的是错的。 
这里不应该用map map表达的是key 和 value的映射
注意key是唯一的是一种集合的概念。
(如果java中的map是一种dup map那算我没说.)
具体到你的问题文件中的内容应该保存在list里
之后的做法一般有2种
1. list中的元素是每行中的内容。 自定义比较方法每次比较时都去从这个string中解析那个int. 这种方法比较省事只要自己定义一个比较方法就可以了
2. 上一个方法有个比较明显的缺点是 每次比较都要解析一次字符串 效率较差。所以在list中可以保存每行内容和数值的一个pair. (java中好像没有内置的pair类型, 可以自己写一个, 不过几行代码的事。 或者直接使用元素为Object类型的list)

建议:
踏实一点不要 听LS几位的认为这是个API问题就不重视. 实际这事概念问题 :p
刚毕业打好基础很重要.
祝你好运


首先谢谢您能花那么几分钟来点评教导,我会认真打好基础的。帖子发出去也想到了TreeMap的key不能重复的问题,一旦重复就只显示相同key的其中的一条
0 请登录后投票
   发表时间:2009-01-06  
public void sortFile(String sourceFile, String destFile) {
		BufferedReader bReader = null;
		PrintWriter pWriter = null;
		try {
			bReader = new BufferedReader(new InputStreamReader(
					new FileInputStream(sourceFile)));
			String keyString = bReader.readLine();
			Map<Integer, String> map = new HashMap<Integer, String>();
			while (keyString != null) {
				String[] ar = keyString.split(" ");
				map.put(Integer.valueOf(ar[1]), ar[0]);
				keyString = bReader.readLine();
			}
			System.out.println("读取文件成功...");
			Object[] objects = map.keySet().toArray();
			Arrays.sort(objects);
			pWriter = new PrintWriter(new FileOutputStream(destFile));
			int len = objects.length;
			for (int i = len - 1; i >= 0; i--)
				pWriter.println(new StringBuilder(map.get(objects[i])).append(
						" ").append(objects[i]).toString());
			pWriter.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (bReader != null) {
				try {
					bReader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (pWriter != null) {
				pWriter.close();
			}
		}
		System.out.println("保存文件成功....");
	}

 

0 请登录后投票
   发表时间:2009-01-06  
自己把文本里面一行的东西定义个对象。实现Comparable接口
class Student implements Comparable
{
 int age;
 String name; 
 
 public Student(int age, String name)
 {
  this.age  = age;
  this.name = name;  
 }
 public int compareTo(Object o)
 {
  Student s = (Student)o;
  return age > s.age ? 1:(age == s.age ? 0 : -1);
 }
}

随便你用什么排序都行了。还可以扩展到多个属性。
2 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics