IO流-几个简单的练习

本文通过五个实战案例,详细介绍了如何使用Java IO流进行数据操作,包括从集合存取文本文件、随机读取文件内容、复制文件夹及特定文件,并实现了文件名的修改功能。
摘要由CSDN通过智能技术生成

把集合中的数据存储到文本文件案例

package someExample;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/*
 * 把集合中的数据存储到文本文件案例
 * 
 * 需求:把ArrayList集合中的字符串存储到文本文件中
 * 
 * 分析:
 * 		通过题目意思我们可以知道如下的一些内容,
 * 			ArrayList集合中存储的是字符串。
 * 			遍历ArrayList集合,把数据获取到。
 * 			然后存储到文本文件中。
 * 			文本文件说明使用字符流。
 * 
 * 数据源
 * 		ArrayList<String>	--	遍历得到每一个字符串数据
 * 目的地
 * 		a.txt	--	FileWriter --	BufferedWriter
 */
public class ArrayListToFileDemo {
	public static void main(String[] args) throws IOException {
		// 封装数据源(创建集合对象)
		ArrayList<String> array = new ArrayList<String>();

		// 存储字符串数据
		array.add("hello");
		array.add("world");
		array.add("java");

		// 封装目的地
		BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));

		// 遍历
		for (String s : array) {
			// 写出数据
			bw.write(s);
			bw.newLine();
			bw.flush();
		}

		// 释放资源
		bw.close();
	}
}

把文本文件中的数据存储到集合中案例

package someExample;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

/*
 * 把文本文件中的数据存储到集合中案例
 * 
 * 需求:从文本文件中读取数据(每一行为一个字符串数扰)到集合中,并遍历集合
 * 
 * 分析:
 * 		通过题目的意思我们就可以知道如下一些内容,
 * 			数据源是文本文件。
 * 			目的地是一个集合。
 * 			而且元素是字符串
 * 
 * 数据源
 * 		a.txt	--	FileReader	-- BufferedReader
 * 目的地
 * 		ArrayList<String>	--	遍历集合并输出字符串
 */
public class FileToArrayListDemo {
	public static void main(String[] args) throws IOException {
		// 封装数据原
		BufferedReader br = new BufferedReader(new FileReader("a.txt"));

		// 封装目的地(创建集合对象)
		ArrayList<String> array = new ArrayList<String>();

		// 读取数据存储到集合中
		String line = null;
		while ((line = br.readLine()) != null) {
			array.add(line);
		}

		// 释放资源
		br.close();

		// 遍历集合
		for (String s : array) {
			System.out.println(s);
		}
	}
}

 随机获取文本文件中的姓名案例

package someExample;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;

/*
 * 随机获取文本文件中的姓名案例
 * 
 * 需求:我有一个文本文件中存储了几个名称,请写一个程序随即获取一个人的名字。
 * 
 * 分析:
 * 		A:把文本文件中的数据存储到集合中
 * 		B:随机产生一个索引
 * 		C:根据该索引获取一个值
 */
public class GetNameDemo {
	public static void main(String[] args) throws IOException {
		// 把文本文件中的数据存储到集合中
		BufferedReader br = new BufferedReader(new FileReader("b.txt"));
		ArrayList<String> array = new ArrayList<String>();
		String line = null;
		while ((line = br.readLine()) != null) {
			array.add(line);
		}

		// 随机产生一个索引
		Random r = new Random();
		int index = r.nextInt(array.size());

		// 根据该索引获取一个值
		String name = array.get(index);
		System.out.println("幸运用户是:" + name);

		// // 封装数据源
		// BufferedReader br = new BufferedReader(new FileReader("b.txt"));
		// // 封装目的地
		// HashMap<Integer, String> hm = new HashMap<Integer, String>();
		//
		// // 读取数据存到到集信中
		// int index = 1;
		// String line = null;
		// while ((line = br.readLine()) != null) {
		// hm.put(index, line);
		// index++;
		// }
		//
		// // 释放资源
		// br.close();
		//
		// // 随即获取一个名称
		// Random r = new Random();
		// int i = r.nextInt(hm.size()) + 1;
		// System.out.println(hm.get(i));

	}
}

 复制单级文件夹案例

package someExample;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * 复制单级文件夹案例
 * 
 * 需求:复制单极文件夹(复制文件夹所有的文件到另一个文件夹中)
 * 
 * 数据源:e:\\demo
 * 目的地:e:\\test
 * 
 * 分析:
 * 		A:封装目录
 * 		B:获取该目录下的所有文件的File数组
 * 		C:遍历该File数组,得到每一个File对象
 * 		D:把该File进行复制
 */
public class CopyFolderDemo {
	public static void main(String[] args) throws IOException {
		// 封装目录
		File srcFolder = new File("e:\\demo");
		// 封装目的地
		File destFolder = new File("e:\\test");
		// 如果目的地的文件夹不存在,就创建
		if (!destFolder.exists()) {
			destFolder.mkdir();
		}

		// 获取该目录下的所有文件的File数组
		File[] fileArray = srcFolder.listFiles();

		// 遍历该File数组,得到每一个File对象
		for (File file : fileArray) {
			// System.out.println(file);
			// 数据源:e:\\demo\\e.mp3
			// 目的地:e:\\test\\e.mp3
			String name = file.getName();// e.mp3
			File newFile = new File(destFolder, name);// e:\\test\\e.mp3

			copy(file, newFile);
		}
	}

	public static void copy(File file, File newFile) throws IOException {
		// 数据源
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
				file));
		// 目的地
		BufferedOutputStream bos = new BufferedOutputStream(
				new FileOutputStream(newFile));

		// 读写数据
		byte[] bys = new byte[1024];
		int len = 0;
		while ((len = bis.read(bys)) != -1) {
			bos.write(bys, 0, len);
		}

		// 释放资源
		bos.close();
		bis.close();
	}
}

复制指定目录下指定后缀名的文件并修改名称案例

package someExample;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;

/*
 * 复制指定目录下指定后缀名的文件并修改名称案例
 * 
 * 需求:复制指定目录下的指定文件,并修改后缀名。
 * 指定文件是:java文件
 * 指定后缀名是:.jad
 * 指定目的目录是:jad
 * 
 * 数据源:e:\\javas\\A.java
 * 目的地:e:\\jad\\A.jad
 * 
 * 分析:
 * 		A:封装目录
 * 		B:获取该目录下的java文件的File数组
 * 		C:遍历该File数组,得到每一个File对象
 * 		D:把该File进行复制
 * 		E:在目的地目录下改名
 */
public class CopyFolderDemo2 {
	public static void main(String[] args) throws IOException {
		// 封装目录
		File srcFolder = new File("e:\\javas");
		File destFolder = new File("e:\\jad");

		// 如果该文件夹不存在就创建该文件夹
		if (!destFolder.exists()) {
			destFolder.mkdir();
		}

		// 获取该目录下的java文件的File数组
		File[] fileArray = srcFolder.listFiles(new FilenameFilter() {
			public boolean accept(File dir, String name) {
				return new File(dir, name).isFile() && name.endsWith(".java");
			}
		});
		for (File file : fileArray) {
			// System.out.println(file);
			// 数据源:e:\\javas\DataTypeDemo.java
			// 目的地:e:\\jad\DataTypeDemo.java
			String name = file.getName();
			File newFile = new File(destFolder, name);

			// 把该File进行复制
			copyFile(file, newFile);
		}

		// 在目的地目录下改名
		File[] destFileArray = destFolder.listFiles();
		for (File destFile : destFileArray) {
			// System.out.println(file);
			// e:\\javas\\DataTypeDemo.java
			// e:\\jad\\DataTypeDemo.jad
			String name = destFile.getName();// DataTypeDemo.java
			String newName = name.replace(".java", ".jad");// DataTypeDemo.jad

			File newFile = new File(destFolder, newName);
			destFile.renameTo(newFile);
		}
	}

	public static void copyFile(File file, File newFile) throws IOException {
		// 封装数据源
		BufferedReader br = new BufferedReader(new FileReader(file));
		// 封装目的地
		BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));

		// 读写数据
		String line = null;
		while ((line = br.readLine()) != null) {
			bw.write(line);// 写一行数据
			bw.newLine();// 跟据系统属性换行
			bw.flush();// 刷新缓存
		}

		// 释放资源
		bw.close();
		br.close();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值