11 IO流总结及相关练习题
程序员文章站
2022-04-03 17:14:12
...
一 IO流总结
练习一
package Stream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
/*
* IO流复制文本文件的五种方式
* 数据源
* limi.txt 字符流 读 Reader InputStreamReader(FileReader)
*
* 目的地
* zxx.txt 字符流 写 Writer OutputStreamWriter(FileWriter)
*/
public class IOstearmDemotest01 {
public static void main(String[] args) throws IOException {
method1();//字符流一次读取一个字符
// method2();//字符流一次读取一个字符数组
// method3();//缓冲流的特殊功能
// method4();//缓冲流一次读取一个字符
// method5();//缓冲流一次读取一个字符数组
}
/**********11111111111111111111111111111**********************/
public static void method1() throws IOException {
//数据源
FileReader fr1 = new FileReader("limi.txt");
//目的地
FileWriter fw1 = new FileWriter(" zxx.txt");
//一次读取一个字符
int by =0 ;
while((by=fr1.read())!=-1){
fw1.write((char)by);
}
//释放资源
fr1.close();
fw1.close();
}
/**********222222222222222222222222 **********************/
public static void method2() throws IOException {
//数据源
FileReader fr2 = new FileReader("limi.txt");
//目的地
FileWriter fw2 = new FileWriter(" zxx.txt");
//一次读取一个字符数组
char[] ch = new char[1024];
int len = 0;
while((len=fr2.read(ch))!=-1){
fw2.write(ch,0,len);
}
//释放资源
fr2.close();
fw2.close();
}
/**********333333333333333333333333333*********************/
public static void method3() throws IOException {
//数据源
BufferedReader br3 = new BufferedReader(new FileReader("limi.txt"));
//目的地
BufferedWriter bw3 = new BufferedWriter(new FileWriter("zxx.txt"));
//特殊功能
String len = null ;
while((len =br3.readLine())!= null){
bw3.write(len);
bw3.newLine();
}
//释放资源
br3.close();
bw3.close();
}
/**********4444444444444444444444444444*********************/
public static void method4() throws IOException {
//数据源
BufferedReader br4 = new BufferedReader(new FileReader("limi.txt"));
//目的地
BufferedWriter bw4 = new BufferedWriter(new FileWriter("zxx.txt"));
//一次读取一个字符串
//一次读取一个字符
int by =0 ;
while((by=br4.read())!=-1){
bw4.write((char)by);
}
//释放资源
br4.close();
bw4.close();
}
/**********5555555555555555555555555555555555*********************/
public static void method5() throws IOException {
//数据源
BufferedReader br5 = new BufferedReader(new FileReader("limi.txt"));
//目的地
BufferedWriter bw5 = new BufferedWriter(new FileWriter("zxx.txt"));
//一次读取一个字符串的一部分
char[] ch = new char[1024];
int len = 0;
while((len=br5.read(ch))!=-1){
bw5.write(ch,0,len);
}
//释放资源
br5.close();
bw5.close();
}
}
练习二
package Stream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* IO流复制图片的四种方式
* 数据源
* 华清池.jpg 字节流 读 InputStream FileInputStream
*
* 目的地
* 东方不败.jpg 字节流 写 OutputStream FileOutputStream
*/
public class IOstearmDemotest02 {
public static void main(String[] args) throws IOException {
// method1();//字节流一次读取一个字节
// method2();//字节流一次读取一个字节数组
// method3();//字节缓冲流一次读取一个字节
method4();//字节缓冲流一次读取一个字节数组
}
/**********11111111111111111111111111111**********************/
public static void method1() throws IOException {
//数据源
FileInputStream fi1 = new FileInputStream("华清池.jpg");
//目的地
FileOutputStream fo1 = new FileOutputStream("东方不败.jpg");
//一次读取一个字节
int by =0 ;
while((by=fi1.read())!= -1){
fo1.write(by);
}
//释放资源
fi1.close();
fo1.close();
}
/**********222222222222222222222222 **********************/
public static void method2() throws IOException {
//数据源
FileInputStream fi2 = new FileInputStream("华清池.jpg");
//目的地
FileOutputStream fo2 = new FileOutputStream("东方不败.jpg");
//一次读取一个字节数组
byte[] ch = new byte[1024];
int len = 0;
while((len=fi2.read(ch))!=-1){
fo2.write(ch,0,len);
}
//释放资源
fi2.close();
fo2.close();
}
/**********333333333333333333333333333*********************/
public static void method3() throws IOException {
//数据源
BufferedInputStream bis1 = new BufferedInputStream(new FileInputStream("华清池.jpg"));
//目的地
BufferedOutputStream bos1 = new BufferedOutputStream(new FileOutputStream("东方不败.jpg"));
//一次读取一个字节
int by =0 ;
while((by=bis1.read())!=-1){
bos1.write(by);
}
//释放资源
bis1.close();
bos1.close();
}
/**********44444444444444444444444444444444*********************/
public static void method4() throws IOException {
//数据源
BufferedInputStream bis2 = new BufferedInputStream(new FileInputStream("华清池.jpg"));
//目的地
BufferedOutputStream bos2 = new BufferedOutputStream(new FileOutputStream("东方不败.jpg"));
//一次读取一个字符串的一部分
byte[] ch = new byte[1024];
int len = 0;
while((len=bis2.read(ch))!=-1){
bos2.write(ch,0,len);
}
//释放资源
bis2.close();
bos2.close();
}
}
练习三 把ArrayList集合中的字符串数据存储到文本文件
package Stream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
/*
* 把ArrayList集合中的字符串数据存储到文本文件
* 分析
* 数据源
* ArrayList集合中的字符串数据 字符流
*
* 目的地
* 文本文件 字符流
*/
public class IOstearmDemotest03 {
public static void main(String[] args) throws IOException{
//首先要有集合封装数据源
ArrayList<String> arr = new ArrayList<String> ();
arr.add("hello");
arr.add("world");
arr.add("java");
//封装目的地
BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
for(String s:arr){
bw.write(s);
bw.newLine();
bw.flush();
}
bw.close();
}
}
练习四 把文本中的文件存储到集合中
package Map.HashMap;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
/*把文本中的文件存储到集合中
*
* 分析
* 数据源 文本文件
* a.txt 字符流
*
* 目的地 集合
* ArrayList
* */
public class IOStreamDemo{
public static void main(String[] args) throws IOException {
//数据源
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//目的地
ArrayList<String> array = new ArrayList<String>();
char[] ch = new char[1024];
String line = null;
while((line=br.readLine())!= null){
array.add(line);
}
ch.clone();
//遍历集合
for(String s:array){
System.out.println(s);
}
}
}
练习五:一个文本文件存储了几个名称,请写一个程序随机获取一个人的名字
package Map.HashMap;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
/*我有一个文本文件存储了几个名称,请写一个程序随机获取一个人的名字
* 分析:
* A:把文本文件中的数据存储到集合中
* B:随机产生一个索引
* C:根据索引获取一个值
*
* */
public class IOStreamDemo001{
public static void main(String[] args) throws IOException {
//数据源
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//目的地
ArrayList<String> array = new ArrayList<String>();
char[] ch = new char[1024];
String line = null;
while((line=br.readLine())!= null){
array.add(line);
}
ch.clone();
//获取随机数组
Random r = new Random();
int index = r.nextInt(array.size());//产生的随机数大小在0-size之间
//根据索引获取随机数的值
String name = array.get(index);
System.out.println("该幸运者是 "+name);
}
}
练习六: 复制单级文件夹
package Map.HashMap;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
/*复制单级文件夹
* 数据源:e://demo
* 目的地:e://test
*
* 分析
* A:封装目录
* B: 获取该目录下的所有文件的File数组
* C:遍历File数组得到每一个File对象
* D:把该File进行复制
* 注意文件会自动创建,而文件夹不会
*
* */
public class IOStreamDemo002{
public static void main(String[] args) throws IOException{
// A:封装目录
File srcFolder = new File("e://demo");
// B:封装目的地
File destFolder = new File("e://test");
//如果目的地文件夹不存在,就创建
if (!destFolder.exists()) {
destFolder.mkdir();
}
// 获取该目录下的所有文本的File数组
File[] fileArray = srcFolder.listFiles();
for(File f:fileArray){
// e:\demo\IoDemo09.java
String name = f.getName();//IoDemo09.java
File newFile = new File(destFolder, name);//e:\test\IoDemo09.java
copeFile(f,newFile);
}
}
public static void copeFile(File f, File newFile) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
ArrayList<File> ary = new ArrayList<File>();
byte[] by = new byte[1024];
int len = 0;
while((len = bis.read(by))!=-1){
bos.write(by, 0, len);
}
bos.close();
bis.close();
}
}
练习七:复制指定目录下指定文件,并修改后缀名
package Map.HashMap;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
/*复制指定目录下指定文件,并修改后缀名
*
* */
public class IOStreamDemo003{
public static void main(String[] args) throws IOException {
File srcFolder = new File("e://io");
File destFolder = new File("e://wy");
if(!destFolder.exists()){
destFolder.mkdir();
}
File[] fileFolder = srcFolder.listFiles();
for(File file:fileFolder){
if (file.isFile()&& file.getName().endsWith(".java")) {
String name = file.getName();
File newFile = new File(destFolder, name);
copyFile(file,newFile);
}
//在目的地目录下改名
File[] filefolder = destFolder.listFiles();
for(File F:filefolder){
// System.out.println(F);//e:\wy\IoDemo04.java
String name = F.getName();
// System.out.println(name);
String newname = name.replace(".java", ".jad");
File newFile1 = new File(destFolder,newname);
System.out.println(newFile1);
}
}
}
public static void copyFile(File file, File newFile) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
byte[] by = new byte[1024];
int len = 0;
while((len = bis.read(by))!= -1 ){
bos.write(by, 0, len);
}
bis.close();
bos.close();
}
}
练习八:复制多级文件夹
package IO;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 需求:复制多级文件夹
*
*数据源 F:\zxx\demos
*目的地 F:\\
* 分析
* A:封装数据源File
* B:封装目的地File
* C:判断该File是文件夹还是文件
* a 是文件夹
* 就在目的地目录下创建该文件夹
* 获取该File对象下的所有文件或文件夹File对象
* 遍历每一个File对象
* 回到C
* b 是文件
* 就复制(字节流)
*
**/
public class StreamDemo01 {
public static void main(String[] args) throws IOException {
//封装数据源File
File srcFile = new File("F:\\zxx\\demos");
//封装目的地File
File descFile = new File("F:\\");
//复制文件夹功能
CopeFoledor(srcFile,descFile);
}
public static void CopeFoledor(File srcFile, File descFile) throws IOException {
//判断该File是文件夹还是文件
if(srcFile.isDirectory()){
//文件夹
File newFodler = new File(descFile,srcFile.getName());
newFodler.mkdir();
//获取该File对象下的所有文件或文件夹File对象
File[] file = srcFile.listFiles();
for(File f:file){
CopeFoledor(f,newFodler);
}
}else{
//文件
File newFile = new File(descFile,srcFile.getName());
CopeFile(srcFile,newFile);
}
}
//专门复制文件
public static void CopeFile(File srcFile, File newFile) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
byte[] cr = new byte[1024];
int len = 0;
while((len= bis.read(cr))!= -1){
bos.write(cr, 0, len);
}
bis.close();
bos.close();
}
}