JavaIo编程(文件操作类与字节流)

1.文件操作类:File(java.io.File)
File类本身只是操作文件的,不涉及到文件内容。
在使用File类c操作的时候路径的分隔符使用:File.separator;

File类中常用操作方法:
(1)构造方法:File(String pathname) 传递完整文件操作路径
File(String parent, String child) 设置父路径与子文件路径

(2)普通方法:boolean createNewFile()
boolean delete() 删除指定路径的文件
boolean exists() 文件或目录是否存在
File getParentFile() 取得当前路径的父路径
boolean isDirectory() 是否为目录
boolean isFile() 是否为普通文件
boolean mkdirs() 创建多级目录
long length() 取得文件大小,以字节为单位返回
long lastModified() 取得文件的最后一次修改日期时间
String [] list() 列出指定目录中的全部内容
File [] listFiles() 列出所有的路径以File类对象包装

列出目录信息:

import java.io.File;
public class TestList {
	public static void main(String args[]){
		File file = new File("D:" + File.separator + "myeclipse" );
		if(file.isDirectory()){					//判断当前路径是否为目录
			File result []= file.listFiles();
			for(int i=0; i<result.length; i++){
				System.out.println(result[i]);	//调用toString
			}
		}
	}
}

(偷个懒,异常就不写了,嘿嘿)

2.字节流与字符流
作用:操作文件内容。
字节流:InputStream(输入字节流)、OutputStream(输出字节流)。
字符流:Reader(输入字符流)、Writer(输出字符流)。

流分为输入流与输出流(主要看参考点)。
如:下雨››››››水库,在这里面 下雨(输出)水源,水库就是输入流。
水库›››››屋子,水库(输出)水源,这里水库是输出流,屋子则是输入流。

输出流: 程序 >>> OutputStream >>>文件 (程序输出内容到文件)
输入流: 程序 <<< lnputStream <<<文件 (文件输出内容到程序)

流的基本操作形式:
(1)第一步:通过File类定义一个要操作文件的路径;
(2)第二步:通过字节流或字符流的子类为父类对象实例化;(A a = new B())
(3)第三步:进行数据的读(输入)、写(输出)操作;
(4)第四步:数据流输入资源操作,资源操作必须关闭。(close())方法

注意:四个操作流的类(OutputStream、InputStream、Writer、Reader)全部都属于操作类,所以必须使用向上转型来操作。

2.1字节输出流:OutputStream
OutputStream类的常用方法:
void write(byte[] b) 输出全部字节
void write(byte[] b, int off, int len) 输出部分字节(从off开始输出指定长度的字节)—(使用较多)
abstract void write(int b) 输出单个字节

因为OutputStream本身是一个抽象类,所以需要一个子类来进行文件操作——FileOutputStream

FileOutputStream类的常用方法:
FileOutputStream(File file) ( 创建文件将内容输出到指定路径,或如果文件已存在,则使用新的内容覆盖就的内容。
FileOutputStream(File file, boolean append) 如果将布尔参数设置为true,表示追加新的内容到文件中。

文件内容的输出:


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


public class TestOutputStream {
	public static void main(String[] args){
		File file = new File("D:"+ File.separator + "demo");	//第一步:定义要输出文件的路径
		if(!file.getParentFile().exists()){			//文件不存在,则创建
			file.getParentFile().mkdir();			//文件不存在,则创建
		}
		OutputStream output = null;
		try {
			output = new FileOutputStream(file);	//第二步:用OutputStream和子类FileOutputStream进行对象的实例化
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String str ="AAA";						//字节输出流需要byte类型,所以要将String类对象变为字节数组
		byte data[] =str.getBytes();			//将字符串变为字节数组
		try {
			output.write(data);					//第三步:输出内容
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			output.close();					//第四步:资源关闭
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

以上按照了流的操作步骤进行。


2.2字节输入流:InputStream
InputStream常用方法:
int	read()				读取单个字节
int	read(byte[] b)			将数据读取到字节数组中,同时返回读取长度
int	read(byte[] b, int off, int len)		将数据读取到部分字节数组中,同时返回读取的数据长度(从off开始输出指定长度的字节)

区别:InputStream中的read()方法与OutputStream()中的write()方法对应,但前者是为了接收(输入)数据,后者是输出数据。

因为InputStream本身是一个抽象类,所以需要一个子类来进行文件操作——FileInputStream

数据读取操作1:(读取的数据量小于数组大小,并且是将数据一次性读取到字节数组中)



```java
import java.io.*;

public class TestInputStream {
	public static void main(String[] args) throws Exception {
		File file = new File("D:" + File.separator + "demo"+
								File.separator + "test.txt");	//第一步:定义要输出的文件路径
		if(file.exists()){
				InputStream input = new FileInputStream(file); //第二步:向上转型			
			byte data [] = new byte [123];						//准备出一个123的数组
			int len = input.read(data);								//第三步:进行数据读取,将内容保存到字节数组中
			input.close();									//第四步:关闭输入流
			System.out.println("[" +  new String(data,0,len)  +"]");//变为字符串输出
		}
	}
}

数据读取2:(读取单个字节,用while循环,因为循环次数不确定)


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



public class TestInputStream2 {
	public static void main(String[] args) throws Exception{
		File file = new File("D:" + File.separator + "demo"+
				File.separator + "test.txt");	//第一步:定义要输出的文件路径
		if(file.exists()){
			InputStream input = new FileInputStream(file); //第二步:向上转型	
			byte data [] = new byte [123];					//准备出一个123的数组
			int foot = 0;							//表示字节数组的操作角标
			int temp = 0;							//表示接收每次读取的字节数据
			while( (temp = input.read()) != -1){			//第三步:读取每一个字节
				 data[foot ++] =(byte) temp;				//保存读取的字节到数组之中
			}
			input.close();									//第四步:关闭输入流
			System.out.println("[" +  new String(data,0,foot)  +"]");//变为字符串输出
		}
	}
}


解释:temp=input.read() != -1 .先将read()方法读取的字节内容给temp变量,然后判断读取的temp内容是否是-1

发布了30 篇原创文章 · 获赞 1 · 访问量 1912

猜你喜欢

转载自blog.csdn.net/Zzh1110/article/details/103038003
今日推荐