题目1[字符流]
请使用“便捷字符流”配合数组将文件"窗里窗外"的内容打印到控制台,并统计出读文本共使用的时间;
效果:
参考代码:
public static void main(String[] args) throws IOException {
long t1 = System.currentTimeMillis();
FileReader fr = new FileReader("窗里窗外.txt",Charset.forName("gbk"));
char[] arr = new char[1024];
int len = 0;
while ((len=fr.read(arr))!=-1){
String s = new String(arr, 0, len);
System.out.print(s);//注意输出语句不带 ln
}
fr.close();
long t2 = System.currentTimeMillis();
System.out.println();
System.out.println("-----------------------------------------------");
System.out.println("读取文件共使用了:"+(t2-t1)+"毫秒!");
}
题目2[字符流缓冲流]
将下列文件中的学生信息按照年龄升序排序后重新写回原文件;
要求:
1:使用字符缓冲流完成;
2:每次循环读取一行信息
3:写数据的时候换行使用newLine方法;
效果:
1.txt文件排序前:
1.txt文件排序后:
参考代码:
public static void main(String[] args) throws Exception {
//创建文件对象和字符缓冲流对象,准备读数据
File f = new File("1.txt");
BufferedReader br = new BufferedReader(new FileReader(f));
//准备TreeSet集合,用于保存读到的学生对象并排序
TreeSet<Student> set = new TreeSet<>((s1,s2)->s1.getAge()-s2.getAge()==0?s1.getName().compareTo(s2.getName()):s1.getAge()-s2.getAge());
String s = null;
while ((s=br.readLine())!=null){
String[] split1 = s.split(",");
//把按照切分出来的数组的第1个值作为name,第二个值作为age创建学生对象,并按照年龄排序
Student stu = new Student(split1[0],Integer.parseInt(split1[1]));
set.add(stu);
}
//创建输出流,并把set集合中的学生信息重新写入1.txt文件中;(重写Student的toString方法了)
BufferedWriter bw = new BufferedWriter(new FileWriter("1.txt"));
for (Student stu : set) {
bw.write(stu.toString());
bw.newLine();//换行,不用考虑系统问题,比写\r\n更通用
}
br.close();
bw.close();
System.out.println("排序已完成");
}
public class Student{
private String name;
private int age;
public String toString() {
return name +","+age;
}
--自己补上构造方法,getter/setter方法,hashCode和equals方法--
}
题目3[综合练习1]
完成随机点名器案例;
要求:
1:学生姓名都提前写在文件中;
2:每次敲回车,随机显示一个学生姓名,每人最多显示一次,所有人都显示完了就结束程序;
3:输入over结束程序;
效果:
参考代码:
//存学生姓名
private static ArrayList<String> list=new ArrayList<>();
//静态代码块是为了读txt中的数据进入集合中
static {
try {
FileReader fr = new FileReader("stu.txt");
BufferedReader bf = new BufferedReader(fr);
while (true){
String s = bf.readLine();
if(s!=null&&s.trim().length()>0){
list.add(s);
}else {
break;
}
}
//随机打乱顺序
Collections.shuffle(list);
}catch (Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
System.out.println("今日第1位幸运学生是:"+list.remove(0));
Scanner sc = new Scanner(System.in);
int i=2;
while (true){
System.out.println("回车查看下一位同学,输入over结束程序:");
String s=sc.nextLine();
if("over".equalsIgnoreCase(s)){
System.out.println("谢谢使用,拜拜!");
return;
}
//如果集合中没有数据了,也要结束程序
if(list.size()==0){
System.out.println("所有学生已经全部点名一遍了;");
return;
}
//输入的既不是over而且集合中的数据还大于0,那么就可以移除最大索引的元素,作为幸运学生了
System.out.println("今日第"+i++ +"位幸运学生是:"+list.remove(list.size()-1));
}
}
题目4[综合练习2]
假如config.properties文件上有如下信息.
username=zs
password=123
color=red
请使用键盘录入要登陆的用户名和密码.判断是否正确打印登陆成功和登陆失败.
要求:
如果登陆成功要读取该用户的color属性的值.
如果color=red 以红色字体把用户所有信息打印到控制台. // System.err.println(prop);
如果color=black 以黑色字体把用户所有信息打印到控制台. // System.out.println(prop);
效果:
参考代码:
public static void main(String[] args) throws Exception {
//让用户输入信息
Scanner sc = new Scanner(System.in);
while (true){
System.out.println("请输入用户名:");
String name = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
//从配置文件中获取正确的用户信息
FileReader fr = new FileReader("config.properties");
Properties p = new Properties();
p.load(fr);
//判断用户名和密码是否正确并提示信息
String username = p.getProperty("username");
String password2 = p.getProperty("password");
if (username.equals(name) && password2.equals(password)) {
//说明用户名密码正确
String col = p.getProperty("username");
if("red".equals(p.getProperty("color"))){
System.err.println("亲爱的,"+ name+",登录成功,您的信息如下:");
System.err.println(p);
}else {
System.out.println("亲爱的,"+ name+",登录成功,您的信息如下:");
System.out.println(p);
}
break;
}else {
System.out.println("登录失败,用户名或密码不对呀!");
}
}
}
版权声明:本文为qq_45181415原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。