I/o流Buffer操作

基础题

练习一

描述:利用高效字节输出流往C盘下的d.txt文件输出一个字节数。

答案

/**
 * 
 */
package Test1;

import java.awt.image.BufferedImageFilter;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author sq
 * @date 2020年5月27日
 * @Desription: TODO
 */
public class Test1 {
	
	public static void main(String[] args) throws IOException {
		// 创建字节流
		FileOutputStream fils=new FileOutputStream("d://a.txt");
		// 创建高效字节流
		BufferedOutputStream bos=new BufferedOutputStream(fils);
		// 写入a
		bos.write(97);
		// 关闭流
		bos.close();
		
	}
	
	

}

练习二

描述:利用高效字节输出流往C盘下的e.txt文件写出一个字节数组数据,如写出:”i love java”

答案

/**
 * 
 */
package Test1;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author sq
 * @date 2020年5月27日
 * @Desription: TODO
 */
public class Test2 {
	public static void main(String[] args) throws IOException {
		// 创建写出流
		FileOutputStream fos=new FileOutputStream("d://a.txt");
		// 创建高级写出流
		BufferedOutputStream bfos=new BufferedOutputStream(fos);
		// 写入I Love Java并把他转化为字节组数
	bfos.write("I Love Java".getBytes());
		// 关闭流
		bfos.close();
	}

}

练习三

描述:利用高效字节输入流和高效字节输出流完成文件的复制。

要求:

1.将C盘下的c.png文件复制到D盘下

2.一次读写一个字节数组方式复制

答案

/**
 * 
 */
package Test1;

import java.awt.image.BufferedImageFilter;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author sq
 * @date 2020年5月27日
 * @Desription: TODO
 */
public class Test3 {
	public static void main(String[] args) throws IOException {
		// 复制文件;
		// 思路:1:把计算机的文件存到jvm中 
		//      2:jvm中的文件在写入到计算机
		 
		
		FileInputStream fins=new FileInputStream("d://a.png");
		  // 两个写入流写到jvm  
		  BufferedInputStream bis=new BufferedInputStream(fins);
		  
		  
		  
		  
		  FileOutputStream fous=new FileOutputStream("d://b.png");
		  // 两个写出流写到计算机
		  BufferedOutputStream  bos=new BufferedOutputStream(fous);
		  
		  
		  int len=-1;
		 byte[] buffer=new byte[1024];
		  
		  while((len=bis.read(buffer))!=-1){
			  bos.write(buffer,0,len);
		  }
		  
		  // 关闭两个包装流
		  bis.close();
		  bos.close();
		  
		   
		
		
	}

}

练习四

高效字符流和集合的综合使用
描述:

分析以下需求,并用代码实现

​ 实现一个验证码小程序,要求如下:

​ 1. 在项目根目录下新建一个文件:data.txt,键盘录入3个字符串验证码,并存入data.txt中,要求一个验证码占一行;

​ 2. 键盘录入一个需要被校验的验证码,如果输入的验证码在data.txt中存在:在控制台提示验证成功,如果不存在控制台提示验证失败

答案

/**
 * 
 */
package Test1;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * @author sq
 * @date 2020年5月27日
 * @Desription: TODO
 */
public class Test4 {
public static void main(String[] args) throws IOException {
    // 先存后验
	
	cun();// 存
	yang();// 验
}

/**
 * @author sq
 * @param 
 * @return void
 * @time 2020年5月27日 下午12:16:31
 * @Desription: TODO
 */
private static void yang()throws IOException {
	// TODO Auto-generated method stub
	ArrayList<String> list=new ArrayList<>();
	BufferedReader br=new BufferedReader(new FileReader(new File("d://a.txt")));
	String line=null;
	while (null!=(line=br.readLine())) {
		list.add(line);
	}
	br.close();
	
	Scanner sc=new Scanner(System.in);
	System.out.println("请输入一个验证码");
	String code=sc.nextLine();
	if (list.contains(code)) {
		System.out.println("验证成功");
	}else{
		System.out.println("验证失败");
	}
	
	
}

/**
 * @author sq
 * @param 
 * @return void
 * @time 2020年5月27日 下午12:10:49
 * @Desription: TODO
 */
private static void cun() throws IOException{
	// TODO Auto-generated method stub
	BufferedWriter bw=new BufferedWriter(new FileWriter(new File("d://a.txt")));
	String line=null;
	Scanner sc=new Scanner(System.in);
	for (int i = 0; i < 3; i++) {
		System.out.println("请输入第"+(i+1)+"个字符串验证码");
	  line=sc.nextLine();
	  bw.write(line);
	  bw.newLine();
	}
	bw.close();
}
}

练习五

转换输出流的使用
描述:现有一字符串:”我爱Java”。将该字符串保存到当前项目根目录下的a.txt文件中。

要求:使用gbk编码保存。

注意:idea的默认编码是utf-8,所以可以通过fileàsettingsàfile encodings设置为gbk格式,否则打开a.txt文件看到的将会是乱码。

答案

/**
 * 
 */
package Test1;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

/**
 * @author sq
 * @date 2020年5月27日
 * @Desription: TODO
 */
public class Test5 {
public static void main(String[] args) throws IOException {
	FileOutputStream fo=new FileOutputStream("d:\\a.txt"); 
  OutputStreamWriter bof=new OutputStreamWriter(fo,"GBK");
  
  
  String zi="我爱Java";
  
  bof.write(zi);
   bof.close();
}
}

练习六

描述:利用转换输入流将当前项目根目录下使用gbk编码的a.txt文件的内容读取出来,并打印在控制台上。

要求:不能出现乱码的情况。

答案

/**
 * 
 */
package Test1;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.CharBuffer;

/**
 * @author sq
 * @date 2020年5月27日
 * @Desription: TODO
 */
public class Test6 {
public static void main(String[] args) throws IOException {
	FileInputStream  fin=new FileInputStream("d:\\a.txt");
	
	InputStreamReader isr=new InputStreamReader(fin,"gbk");
	
	char[] by=new char[1024];
	 int len=-1;
	 while((len=isr.read(by))!=-1){
		 System.out.println(new String(by,0,len));
	 }
	
	isr.close();
	
}
}

扩展题

练习一

描述:定义一个学生类,包含姓名,年龄,性别等成员变量,提供setters和getters方法以及构造方法。在测试类中创建一个学生对象,给学生对象的三个成员变量赋值。然后将该对象保存到当前项目根目录下的stu.txt文件中。

答案

/**
 * 
 */
package Test1;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.text.FieldPosition;
import java.util.ArrayList;

/**
 * @author sq
 * @date 2020年5月27日
 * @Desription: TODO
 */
//描述:定义一个学生类,包含姓名,年龄,性别等成员变量,提供setters和getters方法以及构造方法
//。在测试类中创建一个学生对象,给学生对象的三个成员变量赋值。然后将该对象保存到当前项目根目录下的stu.txt文件中。
class Student{
	String name;
	String age;
	String sex;
	/**
	 * 
	 */
	public Student() {
		// TODO Auto-generated constructor stub
	}
	public Student(String name,String age,String sex) {
		// TODO Auto-generated constructor stub
		this.name=name;
this.age=age;
this.sex=sex;
	}
	
	/**
	 * @return name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name name 
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return age
	 */
	public String getAge() {
		return age;
	}
	/**
	 * @param age age 
	 */
	public void setAge(String age) {
		this.age = age;
	}
	/**
	 * @return sex
	 */
	public String getSex() {
		return sex;
	}
	/**
	 * @param sex sex 
	 */
	public void setSex(String sex) {
		this.sex = sex;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
	}
	
}
public class Test7 {
public static void main(String[] args) throws IOException{
	Student stu=new Student("01","第一","男");
	Student stu1=new Student("02","第二","男");
	ArrayList<Student> st=new ArrayList<Student>();
	st.add(stu);
	st.add(stu1);
   FileOutputStream fos=new FileOutputStream("d:\\a.txt");
   
   OutputStreamWriter ow=new OutputStreamWriter(fos,"gbk");
   
     ow.write(st.toString());
     ow.close();
}
}

练习二

描述:将上一题保存到stu.txt文件中的学生对象读取出来。

答案

/**
 * 
 */
package Test1;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.CharBuffer;
import java.text.FieldPosition;
import java.util.ArrayList;

/**
 * @author sq
 * @date 2020年5月27日
 * @Desription: TODO
 */
//描述:定义一个学生类,包含姓名,年龄,性别等成员变量,提供setters和getters方法以及构造方法
//。在测试类中创建一个学生对象,给学生对象的三个成员变量赋值。然后将该对象保存到当前项目根目录下的stu.txt文件中。
class Student{
	String name;
	String age;
	String sex;
	/**
	 * 
	 */
	public Student() {
		// TODO Auto-generated constructor stub
	}
	public Student(String name,String age,String sex) {
		// TODO Auto-generated constructor stub
		this.name=name;
this.age=age;
this.sex=sex;
	}
	
	/**
	 * @return name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name name 
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return age
	 */
	public String getAge() {
		return age;
	}
	/**
	 * @param age age 
	 */
	public void setAge(String age) {
		this.age = age;
	}
	/**
	 * @return sex
	 */
	public String getSex() {
		return sex;
	}
	/**
	 * @param sex sex 
	 */
	public void setSex(String sex) {
		this.sex = sex;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
	}
	
}
public class Test7 {
public static void main(String[] args) throws IOException{
	Student stu=new Student("01","第一","男");
	Student stu1=new Student("02","第二","男");
	ArrayList<Student> st=new ArrayList<Student>();
	st.add(stu);
	st.add(stu1);
   FileOutputStream fos=new FileOutputStream("d:\\a.txt");
   
   OutputStreamWriter ow=new OutputStreamWriter(fos,"gbk");
   
     ow.write(st.toString());
     ow.close();
     
     // 写入再读
     
     FileInputStream  fis=new FileInputStream("d:\\a.txt");
     InputStreamReader isr=new InputStreamReader(fis,"gbk");
     
     int str=-1;
     char[] by=new char[1024];
     while((str=isr.read(by))!=-1){
    	 System.out.println(new String(by,0,str));
     }
     isr.close();
     
     
}
}

练习三

描述:从键盘录入一行字符串,利用字节打印流将该行字符串保存到当前项目根目录下的d.txt文件中

答案

/**
 * 
 */
package Test1;

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;

/**
 * @author sq
 * @date 2020年5月27日
 * @Desription: TODO
 */
public class Test10 {
public static void main(String[] args)throws FileNotFoundException {
	Scanner sc=new Scanner(System.in);
	System.out.println("请输入一行字符串");
	PrintStream ps=new PrintStream("D:\\a.txt");
	ps.println(sc.next());
	
}
}

练习四

描述:

项目根路径下有text.txt文件,内容如下:

​ 我爱智邦

​ 123456

利用IO流的知识读取text.txt文件的内容反转后写入text1.txt文件中,内容如下:

​ 123456

我爱智邦

提示:List集合反转元素的顺序时,用到了如下API。

java.util类 Collections

static voidreverse(List<?> list) 反转指定列表中元素的顺序。

答案

/**
 * 
 */
package Test1;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

/**
 * @author sq
 * @date 2020年5月27日
 * @Desription: TODO
 */
public class Test9 {
public static void main(String[] args) throws IOException {
	BufferedReader bf=new BufferedReader(new FileReader("d:\\a.txt"));
	
	ArrayList<String> list=new ArrayList<String>();
	String line;
	while((line=bf.readLine())!=null){
list.add(line);	
		
	}
	bf.close();
	BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\a.txt"));
	for (int i = list.size()-1; i >=0; i--) {
		bw.write(list.get(i));
		bw.newLine();
	}
	bw.close();
}

}

练习五

描述:

定义一个学生类,成员变量有姓名,年龄,性别,提供setters和getters方法以及构造方法

定义一个测试类,在测试类创建多个学生对象保存到集合中,然后将集合存储到当前项目根目录下的stus.txt文件中。

答案

/**
 * 
 */
package Test1;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.CharBuffer;
import java.text.FieldPosition;
import java.util.ArrayList;

/**
 * @author sq
 * @date 2020年5月27日
 * @Desription: TODO
 */
//描述:定义一个学生类,包含姓名,年龄,性别等成员变量,提供setters和getters方法以及构造方法
//。在测试类中创建一个学生对象,给学生对象的三个成员变量赋值。然后将该对象保存到当前项目根目录下的stu.txt文件中。
class Student{
	String name;
	String age;
	String sex;
	/**
	 * 
	 */
	public Student() {
		// TODO Auto-generated constructor stub
	}
	public Student(String name,String age,String sex) {
		// TODO Auto-generated constructor stub
		this.name=name;
this.age=age;
this.sex=sex;
	}
	
	/**
	 * @return name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name name 
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return age
	 */
	public String getAge() {
		return age;
	}
	/**
	 * @param age age 
	 */
	public void setAge(String age) {
		this.age = age;
	}
	/**
	 * @return sex
	 */
	public String getSex() {
		return sex;
	}
	/**
	 * @param sex sex 
	 */
	public void setSex(String sex) {
		this.sex = sex;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
	}
	
}
public class Test7 {
public static void main(String[] args) throws IOException{
	Student stu=new Student("01","第一","男");
	Student stu1=new Student("02","第二","男");
	ArrayList<Student> st=new ArrayList<Student>();
	st.add(stu);
	st.add(stu1);
   FileOutputStream fos=new FileOutputStream("d:\\a.txt");
   
   OutputStreamWriter ow=new OutputStreamWriter(fos,"gbk");
   
     ow.write(st.toString());
     ow.close();
     
     // 写入再读
     
     FileInputStream  fis=new FileInputStream("d:\\a.txt");
     InputStreamReader isr=new InputStreamReader(fis,"gbk");
     
     int str=-1;
     char[] by=new char[1024];
     while((str=isr.read(by))!=-1){
    	 System.out.println(new String(by,0,str));
     }
     isr.close();
     
     
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值