0
点赞
收藏
分享

微信扫一扫

Java第十天笔记01——文件与流

芷兮离离 2022-01-16 阅读 86
java

目录

1.File类

2.流的概念及API

3.字节输入流

4.字节输出流

5.使用字节输入和字节输出流复制文件

6.字符输入流 

7. 字符输出流

8.字符输入和字符输出流复制文件内容

9.使用处理流复制文件内容


1.File类

(1)常见构造方法

①File 变量名 = new File(String pathname);

②File 变量名 = new File(URI uri);

③File 变量名 = new File(String parent, String child);

④File 变量名 = new File(File parent, String child);

(2)常见方法

 (3)例子

package test;

import java.io.File;
import java.io.IOException;

public class Test {
	public static void main(String[] args) {
		File file = new File("D:" + File.separator + "temp2" + File.separator + "a.txt");//File.separator代表文件中的斜线“\”
		//相当于
		File file2 = new File("D:\\temp2\\a.txt");
		
		File file3 = new File("b.txt");
		
		File parent = new File("D:\\temp2");
		File file4 = new File(parent, "c.txt");
		
		File file5 = new File("D:\\temp2", "d.txt");
		
		if(!file2.exists()){//file2不存在
			try {
				parent.mkdir();//创建文件夹
				file2.createNewFile();//创建file2文件
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		System.out.println(file3.getAbsolutePath());//输出绝对路径
		
		File files = new File("D:\\temp2\\test\\a");
		files.mkdirs();//创建多级目录
	}
}

 

 2.流的概念及API

(1)流的概念

  • 流(Stream )的概念代表的是程序中数据的流通
  • 数据流是一串连续不断的数据的集合
  • 在Java程序中,对于数据的输入/输出操作是以流(Stream)的方式进行的

 (2)流的分类
①按流的方向不同
输入流、输出流
②按处理数据的单位不同
字节流、字符流
③按功能不同
节点流、处理流

 

 3.字节输入流

(1)InputStream常用的方法

  (2)例子

读取“D:\temp2”目录下a.txt文件的内容

package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class InputStreamTest {
	
	/** 一个一个字节读取	 */
	public static void method1(){
		File directory = new File("D:\\temp2");
		File file = new File(directory, "a.txt");
		InputStream is = null;//创建字节输入流对象
		try {
			is = new FileInputStream(file);
			System.out.println(is.read());
			System.out.println(is.read());
			System.out.println(is.read());
			System.out.println(is.read());
			System.out.println(is.read());
			System.out.println(is.read());
			System.out.println(is.read());
			//............
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				is.close();//释放流占用的资源
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	/** 多个字节读取	 */
	public static void method2(){
		File directory = new File("D:\\temp2");
		File file = new File(directory, "a.txt");
		InputStream is = null;//创建字节输入流对象
		try {
			is = new FileInputStream(file);
			byte[] b = new byte[5];//开房间存放读取的数据,这是数据的中转站,也叫做缓冲区
			int num = 0;//用于记录每次读取到的字节数量
			while((num = is.read(b)) != -1){
				System.out.println(new String(b, 0, num));//打印读到的结果
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				is.close();//释放流占用的资源
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		method1();
		method2();
	}
}

4.字节输出流

(1)OutputStream常用的方法

(2)例子

给“D:\temp2”目录下b.txt文件写入内容

package test;

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

public class OutputSreamTest {
	
	/** 一个一个字节写入b.txt	*/
	public static void method1(){
		File directory = new File("D:\\temp2");
		File file = new File(directory, "b.txt");
		OutputStream os = null;//创建字节输出流
		try {
			os = new FileOutputStream(file);
			os.write(97);//a
			os.write(98);//b
			os.write(99);//c
			os.write(100);//d
			os.write(101);//e
			//......
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				os.close();释放流占用的资源
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	/** 多个字节写入b.txt	*/
	public static void method2(){
		File directory = new File("D:\\temp2");
		File file = new File(directory, "b.txt");
		OutputStream os = null;//创建字节输出流
		try {
			os = new FileOutputStream(file);
			byte[] b = new byte[]{'A', 'B', 'C', 'D', 'E'};
			os.write(b);
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				os.close();释放流占用的资源
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		method1();
		method2();
	}
}

5.使用字节输入和字节输出流复制文件

将“D:\temp2\a.txt”文件的内容复制到“D:\temp2\b.txt”

package test;

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

public class CopyFileContent1 {
	public static void main(String[] args) {
		File directory = new File("D:\\temp2");
		File src = new File(directory, "a.txt");// 源文件
		File dest = new File(directory, "b.txt");// 目标文件
		InputStream is = null;// 创建字节输入流对象
		OutputStream os = null;// 创建字节输出流对象
		try {
			is = new FileInputStream(src);
			os = new FileOutputStream(dest);
			byte[] b = new byte[5];// 开房间存放读取的数据,这是数据的中转站,也叫做缓冲区
			int num = 0;// 用于记录每次读取到的字节数量
			while ((num = is.read(b)) != -1) {
				os.write(b, 0, num);// 将从a.txt文件中读取到的字节写入b.txt
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				is.close();// 释放流占用的资源
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

 

6.字符输入流 

(1)Reader常用的方法

(2)例子

读取“D:\temp2”目录下a.txt文件的内容

package test;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class ReaderTest {
	
	/** 一个一个字符读取	 */
	public static void method1(){
		File directory = new File("D:\\temp2");
		File file = new File(directory, "a.txt");
		Reader reader = null;
		try {
			reader = new FileReader(file);
			System.out.println((char)reader.read());
			System.out.println((char)reader.read());
			System.out.println((char)reader.read());
			System.out.println((char)reader.read());
			System.out.println((char)reader.read());
			//......
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				reader.close();//关闭字符流占用的资源
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	/** 多个字符读取	 */
	public static void method2(){
		File directory = new File("D:\\temp2");
		File file = new File(directory, "a.txt");
		Reader reader = null;
		try {
			reader = new FileReader(file);
			char[] cbuf = new char[5];
			int num = 0;
			while((num = reader.read(cbuf)) != -1){
				System.out.println(new String(cbuf, 0, num));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				reader.close();//关闭字符流占用的资源
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		method1();
		method2();
	}
}

 

7. 字符输出流

(1)Writer常用的方法

(2)例子

 给“D:\temp2”目录下b.txt文件写入内容

package test;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class WriterTest {
	/** 一个一个字符写入	 */
	public static void method1(){
		File directory = new File("D:\\temp2");
		File file = new File(directory, "b.txt");
		Writer writer = null;
		try {
			writer = new FileWriter(file);
			writer.write(65);
			writer.write(66);
			writer.write(67);
			writer.write(68);
			writer.write(69);
			writer.write(70);
			//......
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			try {
				writer.close();//释放字符输出流占用的资源
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	/** 多个字符写入	 */
	public static void method2(){
		File directory = new File("D:\\temp2");
		File file = new File(directory, "b.txt");
		Writer writer = null;
		try {
			writer = new FileWriter(file);
			char[] cbuf = {'A', 'B', 'C', 'D', 'E', 'F'};
			writer.write(cbuf);
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			try {
				writer.close();//释放字符输出流占用的资源
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		method1();
		method2();
	}
}

 

 8.字符输入和字符输出流复制文件内容

将“D:\temp2\a.txt”文件的内容复制到“D:\temp2\b.txt”

package test;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

public class CopyFileContent2 {
	public static void main(String[] args) {
		File directory = new File("D:\\temp2");
		File src = new File(directory, "a.txt");
		File dest = new File(directory, "b.txt");
		Reader reader = null;
		Writer writer = null;
		try {
			reader = new FileReader(src);
			writer = new FileWriter(dest);
			char[] cbuf = new char[5];
			int num = 0;
			while((num = reader.read(cbuf)) != -1){
				writer.write(cbuf, 0, num);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				reader.close();//关闭字符流占用的资源
				writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

9.使用处理流复制文件内容

package test;

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.io.Reader;
import java.io.Writer;

public class CopyFileContent3 {
	public static void main(String[] args) {
		File directory = new File("D:\\temp2");
		File src = new File(directory, "a.txt");
		File dest = new File(directory, "b.txt");
		BufferedReader reader = null;// 创建缓冲字符输入流
		BufferedWriter writer = null;// 创建缓冲字符输出流
		Reader read = null;// 创建字符输入流
		Writer write = null;// 创建字符输出流
		try {
			read = new FileReader(src);
			write = new FileWriter(dest);
			reader = new BufferedReader(read);
			writer = new BufferedWriter(write);
			int num = 0;
			char[] cbuf = new char[5];
			while ((num = reader.read(cbuf)) != -1) {
				writer.write(cbuf, 0, num);
				writer.flush();// 刷新
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				read.close();
				reader.close();
				write.close();
				writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
举报

相关推荐

python第十天笔记

python(第十天)

【JavaSE 第十天】

web第十天

HCIP第十天

第十天学习

JavaScript的第十天

0 条评论