先看这个题,最后会给出一个针对IO的练习列表。
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/*
*
* 获取指定目录下,指定扩展名的文件(包含子目录中的)
* 这些文件的绝对路径写入到一个文本文件中。
*
* 简单说,就是建立一个指定扩展名的文件的列表。
*
* 思路:
* 1,必须进行深度遍历。
* 2,要在遍历的过程中进行过滤。将符合条件的内容都存储到容器中。
* 3,对容器中的内容进行遍历并将绝对路径写入到文件中。
*
*
*/
public class Test {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File dir = new File("e:\\java0331");
FilenameFilter filter = new FilenameFilter(){
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
};
List<File> list = new ArrayList<File>();
getFiles(dir,filter,list);
File destFile = new File(dir,"javalist.txt");
write2File(list,destFile);
}
/**
* 对指定目录中的内容进行深度遍历,并按照指定过滤器,进行过滤,
* 将过滤后的内容存储到指定容器List中。
* @param dir
* @param filter
* @param list
*/
public static void getFiles(File dir,FilenameFilter filter,List<File> list){
File[] files = dir.listFiles();
for(File file : files){
if(file.isDirectory()){
//递归啦!
getFiles(file,filter,list);
}else{
//对遍历到的文件进行过滤器的过滤。将符合条件File对象,存储到List集合中。
if(filter.accept(dir, file.getName())){
list.add(file);
}
}
}
}
public static void write2File(List<File> list,File destFile)throws IOException{
BufferedWriter bufw = null;
try {
bufw = new BufferedWriter(new FileWriter(destFile));
for(File file : list){
bufw.write(file.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
} /*catch(IOException e){
throw new RuntimeException("写入失败");
}*/finally{
if(bufw!=null)
try {
bufw.close();
} catch (IOException e) {
throw new RuntimeException("关闭失败");
}
}
}
}
题目列表:
第一题
简述ArrayList、Vecor、LinkedList之间的区别?
Collection和Map之间的区别?HashSet和TreeSet之间的区别?
Collection和Collections的区别?
Hashtable和HashMap之间的区别?
然后编程向HashSet中保存自定义的对象(Student),并取出打印。
第二题
自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,
让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,
能够在读取的每行前面都加上有行号和冒号。
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream("d:\\MyDoc\\Java文件夹\\实验参数.txt"), "GBK"));
AtomicInteger c = new AtomicInteger(1);
in.lines().forEach(str ->{
System.out.println((c.getAndIncrement()) + "#\t" + str);
});
}
第三题
编写一个程序,当用户输入一个目录时,
该程序能列出该目录下的所有子目录和文件。
public static void main(String[] args) throws IOException {
String filePath = "d:\\MyDoc\\Java文件夹";
//使用Files类的walk方法,除此之外访问目录的项还可以使用list和find方法,只不过用处不同.
Files.walk(Paths.get(filePath), FileVisitOption.FOLLOW_LINKS).forEach(path -> {
System.out.println(path.toAbsolutePath());
});
}
当然,使用File类也可以解决问题,但是一般需要递归。
第四题
有五个学生,每个学生有3门课的成绩,定义一种比较直观的文本文件格式,
输入学生姓名和成绩,输入的格式:name,30,30,30从键盘输入以上数据(包括姓名,三门课成绩),
按总分数从高到低的顺序将学生信息存放在磁盘文件"stu.txt"中。
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class SaveStuentInfo {
public static void main(String[] args) throws IOException {
int stuNumber;
List<StudentInfo> stuList = new ArrayList<>();
Scanner in = new Scanner(System.in);
stuNumber = in.nextInt();
for(int i=0; i<stuNumber; i++){
String name = in.next();
int c1 = in.nextInt();
int c2 = in.nextInt();
int c3 = in.nextInt();
stuList.add(new StudentInfo(name, c1, c2, c3));
}
Collections.sort(stuList);
PrintWriter out = new PrintWriter(new FileWriter("files\\stu.txt"));
for(StudentInfo stu : stuList){
out.println("\t"+stu.getName()+","+stu.getCls1()+","+stu.getCls2()+","+stu.getCls3());
}
out.close();
}
}
class StudentInfo implements Comparable<StudentInfo>{
private String name;
private int cls1, cls2, cls3;
private int sum;
public StudentInfo(String name, int cls1, int cls2, int cls3) {
this.name = name;
this.cls1 = cls1;
this.cls2 = cls2;
this.cls3 = cls3;
this.sum = cls1+cls2+cls3;
}
public String getName() {
return name;
}
public int getCls1() {
return cls1;
}
public int getCls2() {
return cls2;
}
public int getCls3() {
return cls3;
}
@Override
public int compareTo(StudentInfo o) {
return o.sum - this.sum ;
}
}
没有将所学融会贯通,感觉是个笨办法!
第五题
取出D:盘下全部的.java文件的文件路径保存在java.txt文件中
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis();
String fileName = "D:\\MyDoc\\IDEA_ProjFile\\IOTest\\files\\java.txt";//可以就写个"files\\java.txt"
PrintWriter out = new PrintWriter(new FileWriter(fileName));
//还是用了walk,感觉顺手
Files.walk(Paths.get("D:\\MyDoc")).forEach(file ->{//没取D盘
if(file.getFileName().toString().endsWith(".java")){
out.println(file.toAbsolutePath());
}
});
long end = System.currentTimeMillis();
System.out.println(end-start + "ms");
out.close();
}
第六题
取出一个字符串中字母出现的次数。如:"abcdekka27qoq" a(2)b(1)k(2)...
第七题
计算字符串中子串出现的位置,
例:子串"kk"在字符串abkkcdkkabkkefkk中出现的次数
第八题
取出一个文本文件中所有的email地址,并存放到集合中。//正则表达式
第九题
编写一个方法。去除Vector集合中的重复元素。
====第十题====================================
假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:
姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个
奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方
法进行属性访问。
====第十一题==================================
字符串由多个数字和空格组成“20 8 0 -1 32 14 -1 0 8"
将字符串中的数字按数值大小升序排列,获取排序后的字符串。
====第十二题==================================
写一个程序,允许用户依次输入多个姓名和住址,
并能将用户的输入保存到文件中。
用户输入 ”quit” 表示输入完毕,程序退出。
====第十三题==================================
找出一个整数数组{2,4,1,4,3,2,4,3,2}出现次数最多的数。
====第十四题==================================
给定两个字符串,获取两个字符串中最大相同的子串.for(int y=0,z=arr.length=-x; z!=arr.length+1; y++,z++)
====第十五题==================================
在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,
如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),
否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递给该方法,
如果传入的数组为null,应抛出IllegalArgumentException异常。
在类的main方法中以各种可能出现的情况测试验证该方法编写得是否正确,
例如,字符不存在,字符存在,传入的数组为null等。
====第十六题==================================
已知文件a.txt文件中的内容为“bcdeadferwplkou”,
请编写程序读取该文件内容,并按照自然顺序排序后输出到b.txt文件中。
即b.txt中的文件内容应为“abcd…………..”这样的顺序。
====第十七题==================================
客户端向服务端上传图片。将客户端封装成线程。
ServerSocket ss = new ServerSocket(10000);
while(true)
{
Socket s = ss.accept();
new Thread(new UploadThread(s)).start();
}
====第十八题==================================
在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符。
但对应的字节数不同,一个汉字占两个字节。
定义一个方法,按照最大的字节数来取子串。
如:对于“ab你好”,如果取三个字节,那么子串就是ab与“你”字的半个,
那么半个就要舍弃。如果去四个字节就是“ab你”,取五个字节还是“ab你”.
====第十九题==================================
利用LinkedList去实现一个队列的效果.
自定该功能类.(队列的特点是元素先进先出,去查看LinkList中的方法)
我最近也是在不断的学习中,水平有限,如果有什么意见或建议请下方评论哦,我将十分感谢。
如果觉得有收获可以关注一波~~~