Java 08IO流

Java IO

java支持对文本及文件的内容进行读取和写入数据操作,并且数据位于内存中并且属于特定的类型,程序才可以操作它们,如后缀为 txt、doc、xls、jpg、java、class…等的文件。

操作文件的基类 File

File对象可以表示文件也可以表示目录,利用一个File对象可进行一些基本操作。

import java.io.*; //导入包
File file=new File(String path);//创建一个File对象  path 为文件或目录路径

File类的常用方法

方法名 说明
boolean exists() 判断文件或目录是否存在
boolean isFile() 判断是否为文件
boolean isDirectory() 判断是否为目录
String getPath() 返回文件的相对路径
String getAbsolutePath() 返回文件的绝对路径
String getName() 返回文件或目录的名称
boolean delete() 删除此对象指定的目录或文件
boolean createNewFile() 创建名称的空文件,不创建文件夹
long length() 返回文件的长度,单位为字节,若文件不存在,则返回OL

Java流

流–是指一连串流动的字符,是以先进先出的方式发送和接收数据的通道,可以进行读取和写入操作,流就像是一个个的字节序列。

  • 按流向分类:输入流、输出流

  • 按操作对象分类:字节流、字符流

  • 按功能分类:节点流、处理流

操作文件的 java.iO包涵类图

在这里插入图片描述

在进行文件的读取和写入操作时要进行异常的捕捉操作,通常有FileNotFoundException类型异常,关闭文件流会有IOException类型异常。 (以下代码将省略此操作!)
关闭文件流时遵循先开后关原则!

*使用InputStream的子类FileInputStreame读取文件以及用OutputStream
的子类FileOutputStream写入读取的信息到文件的方法

import java.io.*;//直接导入所有包含的包

class Test{
     public void static main(String[] args){
	//创建输入流对象 读取文件信息 D://a.txt
	FlieInputStream fs=new FileInputStream("D://a.txt");
	//创建输出流对象 将读取信息写入 E://b.txt
	FileOutputStream fo=new FileOutputStream("E://b.txt");
	//创建一个中装数组保存读取信息  
	byte [] b=new byte[1024];
	//循环读取文件  并进行文件的写入 ==-1到文件末尾停止读取
	while(fs.read(b)!=-1){
	fo.write(b,0,b.length);//写入文件 
	}
	.......
	//关闭文件流操作   
    }

}

在使用BufferedReader和BufferedWrite进行读写操作时通常与FileReader和FileWrite一起使用提高读取写入文件的效率

import java.io.*;

public class Dome {
   public static void main(String[] args) {
  // TODO Auto-generated method stub
 	 BufferedReader br=null;
 	 BufferedWriter bw=null;
 	 try {
   		br=new BufferedReader(new FileReader("D://12.txt"));
  		 bw=new BufferedWriter(new FileWriter("E://my.txt"));
  		 String line=br.readLine();//校验有无数据      
  		 while(line!=null){
   		     bw.write(line);
   		     line=br.readLine();
   		}
   		System.out.println("复制成功!");
   	}catch(FileNotFoundException f){
   		f.printStackTrace();
   	}finally{
   		try {
    		    if(bw!=null)bw.close();
    		    if(br!=null)br.close();
   		} catch (IOException s) {
   		   s.printStackTrace();
   	}
   }
}

在很多程序中经常看到声明空的对象,是为了避免内存空间的浪费,放在try中若有异常直接被捕获不会造成不必要的空间浪费!

二进制文件的读写使用DataInputStream和DataOutputStream进行图片的复制操作

import java.io.*;

public class Picture{
	public void static main(String[] args){
	int temp;//接收读取信息保存变量
	DataInputStream dis=null;
	DataOutputStream dos=null;
	try{
	    //创建输入流对象 与FileInputStream一起使用提高读取文件速度
	    dis=new DataInputStream(new FileInputStream("D://1.jpg"));
	    //创建输入流对象 与FileOutputStream一起使用提高写入文件速度
	    dos=new DataOutputStream(new FileOutputStream("E://2.jpg")); 
	    while((temp=dis.read())!=-1){
		dos.write(temp);//写入信息
	    }
	    System.out.print("图片保存成功!");
	}catch (FileNotFoundException f){
  	    f.printStackTrace();
	}finally{
	    try {
          	if(dos!=null)dos.close();
          	if(dis!=null)dis.close();
     	    } catch (IOException s) {
       		 s.printStackTrace();
	   }	
	}
}
	字节流: 以byte性数组为中转站保存读取的信息
	字符流:以char数组和String作为保存信息的中转站

区别

字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的

字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容

Read More

发布了10 篇原创文章 · 获赞 7 · 访问量 684

猜你喜欢

转载自blog.csdn.net/weixin_44924238/article/details/103191266