Java基础——IO流(六)练习:文件清单列表

 先看这个题,最后会给出一个针对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中的方法)
 

我最近也是在不断的学习中,水平有限,如果有什么意见或建议请下方评论哦,我将十分感谢。

如果觉得有收获可以关注一波~~~

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值