Java文件输入输出练习(实现文件复制、文件读写、对象序列化)

图片top.bmp位于C盘根目录下,要求将此图片复制到D:\myDoc\myPicture.bmp

package homework;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class Problem1 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	try {
		InputStream is = new FileInputStream(new File("C:\\2.jpg"));//创建文件输入流
		OutputStream os = new FileOutputStream(new File("D:\\myDoc\\2.jpg"));//创建文件输出流
		byte[] bs = new byte[1024];
		int len;
		while((len=is.read(bs, 0, bs.length))!=-1){//read方法返回读取字节的个数
			os.write(bs, 0, len);//将读取的字节写入os对应的文件
		}
		os.close();
		is.close();
		
	} catch (Exception e) {
		// TODO: handle exception
		e.printStackTrace();
	}
	
}

}

2、读取模板文件C:\pet.templater的内容,按照pet.template的模板格式保存宠物数据到文本文件,即把{name}、{type}、{master}替换为具体的宠物信息,将替换后的内容写入到D\myDoc\pet.txt中
在这里插入图片描述

package homework;

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

public class Problem2 {
public static String changeStr(String oldStr,String name,String type,String master){//该方法用来改变字符串
oldStr =“\n” + oldStr.replace(“前”, “后”);
oldStr = oldStr.replace(“前”, “后”);
oldStr = oldStr.replace(“{name}”, name);
oldStr = oldStr.replace(“{type}”, type);
oldStr = oldStr.replace(“{master}”, master);
return oldStr;
}
public static void main(String[] args) {
try {
FileReader fr = new FileReader(new File(“pet.txt”));//文件读入
BufferedReader bfr = new BufferedReader(fr);//使用BufferedReader,因为它的readline还挺好用的
String str = bfr.readLine();
str = changeStr(str, “欧欧”, “狗狗”, “李伟”);
FileWriter fw = new FileWriter(new File(“pet.txt”),true);//文件写出,true表示在原有的内容上添加
BufferedWriter bfw = new BufferedWriter(fw);//buffere输入,也用buffere输出
fw.write(str);
fw.flush();

	} catch (Exception e) {
		// TODO: handle exception
		e.printStackTrace();
	}
	
	
}

}
public static void main(String[] args) throws IOException {
//1、创建一个要替换前后的两个对象的路径
File file =new File(“E://aaa/pet.txt”);
File file1=new File(“E://aaa/pet1.txt”);
if(!file.exists()) {
file.createNewFile();
}
if(!file1.exists()) {
file1.createNewFile();
}
System.out.println(file);
System.out.println(file1);

	//2、用一个字符数组接收写入的文本
	 char[] b=new char[1024];
	 //2、1创建StringBuffer的对象
	 StringBuffer strb=new StringBuffer();
	 try {
	 	//3、创建一个读入的对象,和一个写出的对象
	 	FileReader reader=new FileReader(file);
	 	FileWriter write=new FileWriter(file1);
	 	//3、1用while循环遍历出原始文件,读入程序中,并把接收的字符数组的值放入参数
	 	while(reader.read(b)!=-1) {
	 		//3、2用StringBuffer对象stbr拼接字符数组(char)的对象b
	 		strb.append(b);
	 		write.write(b);
	 	}
	 	write.flush();
	 	System.out.println("替换前\n"+strb);
	 	//4、定义一个新的字符串类型的变量,接收替换前的信息
	 	String str=strb.toString();//toString方法会返回一个“以文本方式表示”此对象的字符串
	 	//4、1利用对象点replace方法,对文本信息进行修改
	 	str=str.replace("name", "小小").replace("type", "狗狗").replace("master", "某某");
	 	System.out.println("替换后:\n"+str);
	 	
	 } catch (FileNotFoundException e) {
	 	e.getStackTrace();
	 }catch (IOException e) {
	 	System.out.println(strb);
	 }	 
	 
	 
	 }

3、将Java对象保存到文本文件中并还原

package homework;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class Person implements Serializable{//对象要先继承序列化接口
private String name;
private int age;
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “]”;
}

}
public class Problem3 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Person p1 = new Person("张三",22);
	try {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();//为了用byte[]数组存储
		//也可以用文件流存储
		ObjectOutputStream oos = new ObjectOutputStream(baos);
		oos.writeObject(p1);
		byte[] bs = baos.toByteArray();
		oos.close();
		baos.close();
		ByteArrayInputStream bais = new ByteArrayInputStream(bs);
		ObjectInputStream ois = new ObjectInputStream(bais);
		Person p2 = (Person)ois.readObject();
		System.out.println(p2);
		
	} catch (Exception e) {
		// TODO: handle exception
		e.printStackTrace();
	}
}

}

替换文本内容(IO流)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;

public class Pet_replace {
public static void main(String[] args) {
Reader r=null;
BufferedReader br=null;
Writer w=null;
BufferedWriter bw=null;

    try {
        r=new InputStreamReader(new FileInputStream("E:\\javaFile\\Pet/P.txt"));
        br=new BufferedReader(r);
        w=new OutputStreamWriter(new FileOutputStream("E:\\javaFile\\Pet/pet.txt"));
        bw=new BufferedWriter(w);
        
        String s="";                            //读取的一行
        StringBuffer sbf=new StringBuffer();    //总共读取的集合
        
        while((s=br.readLine())!=null) {        //读取每一行
            sbf=sbf.append(s);                    //添加读取的每一行
        }
        System.out.println("替换前:"+sbf);
        s=sbf.toString();                        //StringBuffer转成String
        String newString=s.replace("name", "可乐").replace("animal", "猫 ").replace("age", "2");
        System.out.println("替换后:"+newString);
        bw.write(newString);                    //写入文档
        
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        try {
            bw.close();
            w.close();
            br.close();
            r.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}

}
Java中,IO流读取文本信息,并替换字符串的操作
需求说明

按照读取的文本。pet.template 的模版格式保存宠物数据到文本文件,即把name ,type

master替换成具体的宠物信息,将替换的后的内容写入到 F:\myDoc\pet.txt中

替换前:您好!我的名字是name.我是一只type,我的主人是master

替换后:您好!我的名字是小小,.我是一只狗狗,,我的主人是某某
*/
public class Ti {
public static void main(String[] args) throws IOException {
//1、创建一个要替换前后的两个对象的路径
File file =new File(“E://Work/pet.txt”);
File file1=new File(“F://myDoc/pet.txt”);
//System.out.println(file1);
// if(!file.exists()) {
// file.createNewFile();
// }else {
//
// }

//2、用一个字符数组接收写入的文本
char[] b=new char[1024];
//2、1创建StringBuffer的对象
StringBuffer strb=new StringBuffer();
try {
//3、创建一个读入的对象,和一个写出的对象
FileReader reader=new FileReader(file);
FileWriter write=new FileWriter(file1);
//3、1用while循环遍历出原始文件,读入程序中,并把接收的字符数组的值放入参数
while(reader.read(b)!=-1) {
//3、2用StringBuffer对象stbr拼接字符数组(char)的对象b
strb.append(b);
}
System.out.println(“替换前\n”+strb);
//4、定义一个新的字符串类型的变量,接收替换前的信息
String str=strb.toString();//toString方法会返回一个“以文本方式表示”此对象的字符串
//4、1利用对象点replace方法,对文本信息进行修改
str=str.replace(“{name}”, “小小”).replace(“{type}”, “狗狗”).replace(“{master}”, “某某”);
System.out.println(“替换后:\n”+str);

} catch (FileNotFoundException e) {
e.getStackTrace();
}catch (IOException e) {
System.out.println(strb);
}

}

}

对象的序列化
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class Person implements Serializable{//对象要先继承序列化接口
private String name;
private int age;
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “]”;
}

}
public class Problem3 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Person p1 = new Person("张三",22);
	try {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();//为了用byte[]数组存储
		//也可以用文件流存储
		ObjectOutputStream oos = new ObjectOutputStream(baos);
		oos.writeObject(p1);
		byte[] bs = baos.toByteArray();
		oos.close();
		baos.close();
		ByteArrayInputStream bais = new ByteArrayInputStream(bs);
		ObjectInputStream ois = new ObjectInputStream(bais);
		Person p2 = (Person)ois.readObject();
		System.out.println(p2);
		
	} catch (Exception e) {
		// TODO: handle exception
		e.printStackTrace();
	}
}

}

public static void main(String[] args) {
	// TODO Auto-generated method stub
	try {
		File file=new File("C:\\Users\\lang\\Desktop\\aa.txt");
		/*Student s=new Student("lisi");
		FileOutputStream fos=new FileOutputStream(file);
		ObjectOutputStream oos=new ObjectOutputStream(fos);
		oos.writeObject(s);*/
		
		FileInputStream fis=new FileInputStream(file);
		ObjectInputStream ois=new ObjectInputStream(fis);
		Student s1=(Student)ois.readObject();
		System.out.println(s1.getName());
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally
	{
		
	}
}

案例复制文件
public static void main(String[] args) {
// TODO Auto-generated method stub
FileInputStream fis = null;
InputStreamReader fr=null;
BufferedReader br=null;
FileOutputStream fos=null;
OutputStreamWriter ow=null;
try {
File file=new File(“C:\Users\lang\Desktop\超市管理系统需求.txt”);
File file2=new File(“C:\Users\lang\Desktop\Linux安装文档11.txt”);
fos=new FileOutputStream(file2);
fis= new FileInputStream(file);
fr=new InputStreamReader(fis,“GBK”);
ow=new OutputStreamWriter(fos);
br=new BufferedReader(fr);
String str;
StringBuffer buff=new StringBuffer();
while((str = br.readLine())!=null)
{
buff.append(str);
}
//ow.flush();
//字节流读取中文文档
/int len;
///定义字节数组。将读取到信息写入数组中
byte b[]=new byte[1024];
//循环读取数组中的值
while((len=fis.read(b))!=-1)
{
//fos.write(b, 0, len);
for(int i=0;i<len;i++)
{
System.out.print((char)b[i]);
}
}
/
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally
{
if(fis!=null)
{
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(fr!=null)
{
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(br!=null)
{
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(fos!=null)
{
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ow!=null)
{
try {
ow.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

##案例##
public class Java_INR {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	FileInputStream fis = null;
	InputStreamReader fr=null;
	BufferedReader br=null;
	FileOutputStream fos=null;
	OutputStreamWriter ow=null;
	try {
		File file=new File("C:\\Users\\lang\\Desktop\\超市管理系统需求.txt");
		File file2=new File("C:\\Users\\lang\\Desktop\\Linux安装文档11.txt");
		fos=new FileOutputStream(file2);
		fis= new FileInputStream(file);
		fr=new InputStreamReader(fis,"GBK");
		ow=new OutputStreamWriter(fos);
		br=new BufferedReader(fr);
		String str;
		StringBuffer buff=new StringBuffer();
		while((str = br.readLine())!=null)
		{
			buff.append(str);
		}
		//ow.flush();
		//字节流读取中文文档
		/*int len;
		///定义字节数组。将读取到信息写入数组中
		byte b[]=new byte[1024];
		//循环读取数组中的值
		while((len=fis.read(b))!=-1)
		{
			//fos.write(b, 0, len);
			for(int i=0;i<len;i++)
			{
				System.out.print((char)b[i]);
			}
		}*/
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (UnsupportedEncodingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally
	{
		if(fis!=null)
		{
			try {
				fis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(fr!=null)
		{
			try {
				fr.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(br!=null)
		{
			try {
				br.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(fos!=null)
		{
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(ow!=null)
		{
			try {
				ow.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值