JAVA学习第四十八课 — IO流(二):文件的复制 & 缓冲区1

一、复制文本文件

将G盘的文本文件复制到D盘上

也就是 读取G盘中文本文件的数据,写入D盘中->连读带写

而剪切呢,就是连读带写后,删除原盘的文件

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Main
{
	public static void main(String[] args) throws IOException {

		FileReader fr = null;
		FileWriter fw  = null;
		try {
			fr = new FileReader("G盘.txt");
			fw = new FileWriter("D:\\ACM.txt");
			char[] ch = new char[1024];//缓存读取的数据
			int t ;
			while((t = fr.read(ch))!=-1){
				fw.write(ch,0,t);
			}
		} catch (Exception e) {
			System.out.println("读写失败");
		}finally{
			if(fw!=null)
			{
				try {
					fw.close();
				} catch (Exception e2) {
					throw new RuntimeException();
				}
			}
			if(fr!=null){
				try {
					fr.close();
				} catch (Exception e2) {
					throw new RuntimeException();
				}
			}
		}
	}
}</strong></span>

一个文件如果正在使用,是不能被删除的,所以注意要将这两个动作关联起来

二、字符流的缓冲区

实际上,上面的char[]数组就是一个缓冲区,缓冲区的出现提高了对数据的读取效率

BufferedWriter类、BufferedReader类

前提:缓冲区必须结合流才能使用

作用:在流的基础上对流的功能进行了增强

BufferWriter类演示

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。

特有方法:newLine()

<span style="font-family:KaiTi_GB2312;font-size:18px;">import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Main
{
	public static void main(String[] args) throws IOException {

		FileWriter fw = new FileWriter("ACM.txt");
		//创建一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联
		BufferedWriter bw = new BufferedWriter(fw);
		//使用缓冲去的方法,将数据写入到缓冲区中
		bw.write("ACM。。。。");
		bw.newLine();//实际上 System.getproperty("line.separator");
		bw.write("acm");
		//在用缓冲去的刷新方法,将数据写入目的地
		bw.newLine();
		bw.flush();
		for(int i = 0;i<5;i++){
			bw.write("1111");
			bw.newLine();
			bw.flush();
		}
		//关闭缓冲区,其实关闭的就是被缓冲的流对象fw
		bw.close();
	}
}
</span>

BufferedReader类演示

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

特有方法:readLine()

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main
{

	public static void main(String[] args) throws IOException {

		FileReader fr = new FileReader("ACM.txt");

		BufferedReader br = new BufferedReader(fr);

		String str = null;

		while((str = br.readLine())!= null){
			System.out.println(str);
		}
		br.close();
	}
}
</strong></span>

注意:

readLine()方法:使用了读取缓冲区的read方法,将读取到的字符进行缓冲并判断换行标记,将标记前的缓冲数据变成字符串并返回

时间: 2024-10-05 05:25:09

JAVA学习第四十八课 — IO流(二):文件的复制 & 缓冲区1的相关文章

JAVA学习第四十九课 — IO流(三):缓冲区2 &amp; 装饰设计模式

一.模拟BufferedReader 自定义MyBuffereaReader 对于缓冲区而言,里面其实就是封装一个数组,对外提供方法对数组的操作,这些方法最终操作的都是数组的角标 原理:从源中取出数据存入缓冲区,再从缓冲区不断的取出数据,取完后,继续从源中继续取数据,进缓冲区,直至源中的数据取完,用-1做为结束标记 import java.io.*; class MyBufferedReader { private FileReader fr; //定义数组作为缓冲区 private char[

JAVA学习第五十五课 — IO流(九)文件切割合成器

文件切割器 private static final int SIZE = 1024 *1024; public static void splitFile(File file) throws IOException{ //用读取流关联文件(不确定文件格式) FileInputStream fis = new FileInputStream(file);//源是一个 byte[] by = new byte[SIZE];//定义1M的缓冲区 FileOutputStream fos = null

JAVA学习第五十六课 — IO流(十)对象的序列化和反序列化 &amp; RandomAccessFile

操作对象 ObjectInputStream.ObjectOutputStream 被操作的对象需要实现Serializable(标记接口) ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectInputStream 读取(重构)对象.通过在流中使用文件可以实现对象的持久存储.如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象. 对象的默认序列化机制写入的内容是:对象的类,类签名,以及非瞬态和非静态字段的

JAVA学习第四十五课 — 其他对象API(一)

一.System类 1. static long currentTimeMillis() 返回以毫秒为单位的当前时间. 实际上:当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量). long time = 1414069291407l;//long型 后面加l System.out.println(time); 2. static void exit(int status)终止当前正在运行的 Java 虚拟机. static void gc()运行垃圾回收器

JAVA学习第四十五课 — 其它对象API(一)System、Runtime、Math类

一.System类 1. static long currentTimeMillis() 返回以毫秒为单位的当前时间. 实际上:当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位測量). long time = 1414069291407l;//long型 后面加l System.out.println(time); 2. static void exit(int status)终止当前正在执行的 Java 虚拟机. static void gc()执行垃圾回收器

JAVA学习笔记(四十八)- 适配器类 Adapter

适配器类 Adapter,对接口中的抽象方法进行空实现 import java.awt.Button; import java.awt.Frame; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEve

JAVA学习第四十六课 — 其他对象API(二)Date类 &amp; Calendar类(重点掌握)

Date类(重点) 开发时,会时常遇见时间显示的情况,所以必须熟练Date的应用 <span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>import java.util.*; public class Main { public static void main(String[] args){ long l = System.currentTimeMillis();//14140798929

JAVA学习第三十八课(常用对象API)- 集合框架(六)— Map集合及其常用方法

一.Map集合特点 Map集合(双列集合)一次添加一对元素,Collection集合(单列集合)一次添加一个元素 接口 Map<K,V>,实际上存储的是键值对 特点: 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 也就是说Map中必须保证键的唯一性 二.常用方法 1.添加:value = put(key,value);返回前一个和key相关联的值,如果没有返回null 2.删除:void clear();把Map中的所有映射关系清除 value remove(ke

JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet

JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet 一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet-name>ActionServlet</servlet-name> 3 <servlet-class>me.gacl.web.controller.ActionServlet</s