Java知识点详解——第十一章:IO流

        流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。用来进行输入输出操作的流就称为IO流。
        IO流是InputStream(用于读取file文件中的数据)和OutputStream(用于将数据写入file文件)的简称。

Java数据流的划分:

  • 根据功能划分:输入流和输出流;
  • 根据读写数据方式划分:字节流和字符流。

字符流:以字符为单为进行读写,只能对纯文本格式(txt,init,properties,rtf,log)读写。字符流的构建依赖于字节流。

File文件对象的使用(需要导入java.io包:import java.io.File;):

//创建一个文件对象  写入文件的完整路径
File file = new File("d:/myFile/a.txt");	
//使用父路径构建文件
//File file = new File("d:/myFile", "a.txt");
//使用父文件构建文件
//File file = new File(new File("d:/myFile"), "a.txt");

File文件对象的使用方法:

功能示例
获取文件的名称file.getName()
获取文件的相对路径file.getPath()
获取文件的绝对路径file.getAbsolutePath()
获取文件的父路径file.getParent()
判断文件是否存在file.exists()
判断File是否是一个文件夹file.isDirectory()
判断File是否是一个文件file.isFile()
获取文件的长度(文件夹长度为0)file.length()
获得文件最后修改的时间(返回毫秒值)file.lastModified()
判断文件是否是一个隐藏文件file.isHidden()
判断文件是否是可读文件file.canRead()
获取文件所在盘符的已用空间file.getUsableSpace()
获取文件所在盘符的可用空间file.getFreeSpace()
获取文件所在盘符的总空间file.getTotalSpace()

获取系统的所有盘符:

File[] disks = File.listRoots();
		for(File disk : disks){
			System.out.println(disk.getPath());
		}

获取盘符或者文件夹中的子文件:

File file = new File("c:/");
		if(file.isDirectory()){
			//单个文件获取子文件,返回值为null
			File[] files = file.listFiles();
			//遍历子文件
			for(File f : files){
				System.out.println(f.getName());
			}
		}

File文件操作:

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

public class Demo {

	/**File文件操作 */
	public static void main(String[] args) {

		//创建文件夹
		File file = new File("d:/myFile");
		file.mkdir();
		
		//创建文件
		File file = new File("d:/a.jpg");
		try {
			file.createNewFile();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//重命名
		File file = new File("d:/a.jpg");
		File newFile = new File("d:/b.jpg");
		file.renameTo(newFile);
		
		//删除文件
		//如果删除的文件是文件夹,且文件夹包含子文件时,必须要先删除所有的子文件,才能删除父文件夹
		File file = new File("d:/b.jpg");
		file.delete();
				
	}
}

字节输入流的使用:

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

public class Demo {

	/**字节流输入流的使用  */
	public static void main(String[] args) {

		//创建InputStream的子类 FileInputStream
		//输入流用于读取文件
		try {
			FileInputStream fis = new FileInputStream(new File("d:/a.txt"));
			//read方法用于读取一个字节
			int data = fis.read();
			//循环读取文件中的每个字节 -1表示未读取到字节数据
			//使用字节流只能读取到每一个字节数据
			int data;
			//每次读一个字节
			while((data = fis.read()) != -1){
				System.out.println(data);
			}
			
			//缓冲数组
			byte[] buffer = new byte[1024];
			//将数据读取至缓冲中
			fis.read(buffer);
			for(byte b : buffer){
				System.out.println(b);
			}
			
			//指定读取位置进行数据读取缓冲
			byte[] buffer = new byte[1024];
			fis.read(buffer, 0, 1);
			for(byte b : buffer){
				System.out.println(b);
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

字节输出流:

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

public class Demo {

	/**字节输出流,用于将数据写入文件*/
	public static void main(String[] args) {

		try {
			//默认情况下,输出流的写入会覆盖掉源文件的数据
			//通过第二个boolean可以设置是否追加数据,默认为false
			//如果输出流参数中的文件不存在,则会创建新的文件
			FileOutputStream fos = new FileOutputStream(new File("d:/b.txt"),true);
			fos.write(65);
			//清空缓冲
			fos.flush();
			//关闭输出流
			fos.close();
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

字节缓冲流:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

public class Demo4 {

	/**字节缓冲流 */
	public static void main(String[] args) {

		try {
			long start = new Date().getTime();
			//创建缓冲输入流,缓冲流的构建需要 依赖字节流
			BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("d:/apache-tomcat-7.0.78.rar")));
			//创建缓冲输出流
			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("d:/tomcat.rar")));
			
			int len;
			byte[] buffer = new byte[1024*1024];
			while((len = bis.read(buffer)) != -1){
				bos.write(buffer, 0, len);
			}
			
			//清空
			bos.flush();
			bos.close();
			bis.close();
			
			long end = new Date().getTime();
			System.out.println("复制文件耗时:"+(end-start)+"ms");
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值