Java IO流继承体系及代码实现

本文详细介绍Java中处理文件及数据流的方法,包括字节流、字符流、缓冲流、转换流等,涵盖文件复制、文本写入及字符统计等实用代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用:数据的传输

分类

字节流

InputStream

        FileInputStream 文件流  能处理二进制文件也能处理文本

        BufferedInputStream缓冲流  能处理二进制文件也能处理文本

                BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file1))

OutputStream

        FileOutputStream  文件流  能处理二进制文件也能处理文本

        BufferedOutputStream  缓冲流  能处理二进制文件也能处理文本

              BufferedOutputStream bis=new BufferedOutputStream(new FileOutputStream(file2))

        PrintStream

字符流

    Reader

        FileReader文件流  只能处理文本文件

        BufferedReader 缓冲流  只能处理文本文件

                BufferedReader br=new BufferedReader(new FileReader(name))

                readLine()方法

    Writer

        FileWriter 文件流  只能处理文本文件

        BufferedWriter 缓冲流  只能处理文本文件

        PrintWriter  只能处理文本文件

                PrintWriter pw=new PrintWriter(name)

                println()方法

转换流(字节到字符)(构造方法第二个参数编码)

    InputStreamReader  将InputStream转化为Reader

    OutputStreamWriter  OutputStream转化为Writer

二级制处理流

DataInputStream

DataOutputStresam

附几个代码实现

copy文件

	// 八、将一个压缩包如D:\a.rar从一个地方复制到另一个地方如C:\a.rar 
	// 提示:如果涉及到多层级文件夹,则必须要保证目标文件夹的存在
	// Java虽然可以自动创建不存在的文件,但是无法自动创建不存在的文件夹
	public static void copyYaSuoB() {
		//应对输出路径上层目录作判断循环判断是否存在
		String file1 = "F:" + File.separator + "音乐.rar";
		String file2 = "F:" + File.separator + "音乐copy.rar";
		File isfile1 = new File(file1);
		File isfile2 = new File("F:");

		if (isfile1.exists() && isfile2.exists()) {
			BufferedInputStream bis = null;
			BufferedOutputStream bos = null;
			try {
				bis = new BufferedInputStream(new FileInputStream(file1));
				bos = new BufferedOutputStream(new FileOutputStream(file2));
				int read = -1;
				while ((read = bis.read()) != -1) {
					bos.write(read);
				}

			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					bos.close();
					bis.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}

写入文本

// 九、将"内容One"、"内容Two"、"内容Three"3个字符串一行一个,写入D:\a.txt中 
	public static void writeTest() {
		String file1 = "F:" + File.separator + "a.txt";
		PrintWriter pw = null;
		try {
			pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(
					file1), "gbk"));
			pw.println("内容One");
			pw.println("内容Two");
			pw.println("内容Three");

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pw.close();
		}
	}

文本字符统计并输出到控制台

	/*
	 * 十、一个文本文件中,每行一个单词 统计文件中每个单词出现的次数,并按出现的次数降序输出统计结果 如统计 input.txt amen
	 * hello hello world 输出如下统计结果 单词hello出现了2次 单词amen出现了1次 单词world出现了1次
	 */
	public static void countsWord() {
		Map<String, Integer> map = new HashMap<String, Integer>();
		List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>();
		String name = "F:" + File.separator + "input.txt";
		BufferedReader br = null;
		try {
			br = new BufferedReader(new InputStreamReader(new FileInputStream(
					name), "gbk"));
			String line = null;
			while ((line = br.readLine()) != null) {
				if (!(map.containsKey(line))) {
					map.put(line, 1);
				} else {
					map.put(line, map.get(line) + 1);
				}
			}
			list.addAll(map.entrySet());
			Collections.sort(list, new MyComparator());
			for (Entry<String, Integer> e : list) {
				System.out.println("单词" + e.getKey() + "出现了" + e.getValue()
						+ "次");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				br.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值