Java输入输出流(一)

输入输出流
  就是对文件进行读【打开】写【修改】操作的java类库
文件
  就是把数据持久化到磁盘的载体
文件的组成

  1.文件的属性【文件名称,文件大小,文件类型,创建时间…】
  2.文件内容【输入输出流】

  我们要想通过java提供的输入输出流读写文件中的内容就得先学会操作文件。
  Java中为我们提供了一个专门操作文件的java类 —> java.io.File类

一、File类的对象创建和常用方法

File类的定义

public class File

File类的静态成员变量

static StringpathSeparator 与系统相关的路径分隔符字符,为方便起见,表示为字符串
static charpathSeparatorChar 与系统相关的路径分隔符
static Stringseparator 与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串
static charseparatorChar 与系统相关的默认名称分隔符

例如:

package com.wangxing.test1;
import java.io.File;
public class TestFile1 {
	public static void main(String[] args) {
		//static String	pathSeparator 与系统相关的路径分隔符字符,为方便起见,表示为字符串。 
		//static char	pathSeparatorChar 与系统相关的路径分隔符。 
		//static String	separator 与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。 
		//static char	separatorChar 与系统相关的默认名称分隔符。 
		System.out.println("static String	pathSeparator=="+File.pathSeparator);
		System.out.println("static char	pathSeparatorChar=="+File.pathSeparatorChar);
		System.out.println("static  String	separator=="+File.separator);
		System.out.println("static char	separatorChar=="+File.separatorChar);
		//separator/separatorChar---路径分割符号【\】
		//假设我输出一个文件的路径【F:\test\name.text】
		System.out.println("文件的路径--F:\test\name.text");
		//此时我们输出的文件路径不正确,因为java程序将字串中的“\t”解释成制表符,
		//将“\n”解释成了回车输出,此时我们就无法正确的输出/描述一个文件路径。
		//我们要怎么办,可以通过“\\”将文件的路径分割符转义。
		System.out.println("文件的路径--F:\\test\\name.text");
		//既然我们可以通过“\\”转义路径分隔符,那么为什么还需要File类提供静态成员变量来表示路径分割符???
		//原因1:在=使用的时候并不全知道"\"与哪一个字母组合就会是一个特殊字符。
		//原因2:不同的计算机操作系统的路径分割符是不一样  例如"\"windows操作系统分隔符   "/"Linux分隔符.
		//为了不配特殊字符和可以在任何操作系统上完整的表示一个路径分割符号,
		//所以java就将路径分割符号做成了静态成员变量,以适应不同的操作系统和排除特殊字符。
		System.out.println("文件的路径--F:"+File.separator+"test"+File.separator+"name.text");
	}
}

运行结果:

在这里插入图片描述
构造方法:

File(String pathname)通过给定的文件路径字符串创建新的 File实例
File(String parent, String child)通过给定的文件位置字符串和给定的文件名称字符串创建新的 File实例
File(File parent, String child)通过给定的文件位置File对象和给定的文件名称字符串创建新的 File实例

例如:

package com.wangxing.test1;
import java.io.File;
public class TestFile2 {
	public static void main(String[] args) {
		//File(String pathname) 通过给定的文件路径字符串创建新的 File实例。
		String filepath1="F:"+File.separator+"test"+File.separator+"names.text";
		File file1=new File(filepath1);
		//File(String parent, String child) 通过给定的文件位置字符串和给定的文件名称字符串创建新的 File实例。 
		String  path1="F:"+File.separator+"test";
		String  name="names.txt";
		File fil2=new File(path1,name);
		//File(File parent, String child) 通过给定的文件位置File对象和给定的文件名称字符串创建新的 File实例。  
		String  path2="F:"+File.separator+"test";
		File filepath2=new File(path2);
		String  name2="names.txt";
		File file3=new File(filepath2,name2);
	}
}

注意:文件File类的对象创建以后,不会生成实际的文件。

实例方法:
  boolean         exists() 判断路径名表示的文件或目录是否存在。

  boolean         createNewFile() 创建新文件

  boolean         mkdirs() 创建新的文件夹

  boolean         delete() 删除文件/文件夹
        删除文件夹的时候要将该文件夹下的文件和子文件夹全部删除

  boolean         canRead() 判断文件是否可读

  boolean         canWrite() 判断文件是否可写

  boolean         isHidden() 判断文件是否为隐藏文件。

  boolean         isFile() 判断文件对象是否为普通文件。

  boolean         isDirectory() 判断文件对象是否为目录。

  String          getPath() 得到文件对象的路径名字符串。

  String          getName() 得到文件对象所表示的文件或目录的名称。

  String          getParent() 得到文件对象所表示的路径的父目录路径

  long             length() 得到文件对象所表示的文件的长度。

  long         lastModified() 得到文件对象所表示的文件上次修改的时间。

  String[]    list() 得到文件对象代表的文件夹中的所有文件和文件夹名称返回一个字符串数组

  File[]    listFiles() 得到文件对象代表的文件夹中的所有文件和文件夹的文件对象,返回一个文件对象数组

例如:

package com.wangxing.test1;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestFile3 {

	public static void main(String[] args)throws Exception {
		String  path="F:"+File.separator+"test";
		String  filepath="F:"+File.separator+"test"+File.separator+"names.txt";
		//创建保存文件夹的文件对象
		File file1=new File(path);
		//创建保存文件的文件对象
		File file2=new File(filepath);
		/*
		//创建文件夹
		//boolean	exists() 判断路径名表示的文件或目录是否存在。 
		System.out.println(file1.exists());
		if(!file1.exists()) {
			//boolean	mkdirs()  创建新的文件夹
			boolean dirfile=file1.mkdirs();
			if(dirfile) {
				if(!file2.exists()) {
					//boolean	createNewFile() 创建新文件
					file2.createNewFile();
				}
			}
		}else {
			//boolean	delete()  删除文件/文件夹
			//删除文件夹的时候要将该文件夹下的文件和子文件夹全部删除
			file1.delete();
		}
		*/
		//boolean	canRead() 判断文件是否可读
		System.out.println("canRead=="+file2.canRead());
		//boolean	canWrite() 判断文件是否可写 
		System.out.println("canWrite=="+file2.canWrite());
		//boolean	isHidden() 判断文件是否为隐藏文件。 
		System.out.println("isHidden=="+file2.isHidden());
		//boolean	isFile() 判断文件对象是否为普通文件。 
		System.out.println("isFile=="+file2.isFile());
		//boolean	isDirectory() 判断文件对象是否为目录。
		System.out.println("isDirectory=="+file1.isDirectory());
		//String	getPath() 得到文件对象的路径名字符串。 
		System.out.println("getPath=="+file2.getPath());
		//String	getName() 得到文件对象所表示的文件或目录的名称。 
		System.out.println("getName=="+file2.getName());
		//String	getParent() 得到文件对象所表示的路径的父目录路径 
		System.out.println("getParent=="+file2.getParent());
		//long	length() 得到文件对象所表示的文件的长度。 
		System.out.println("length=="+file2.length()+"字节");
		//long	lastModified() 得到文件对象所表示的文件上次修改的时间。 
		String time=new SimpleDateFormat("yyyy/MM/dd E HH:mm").format(new Date(file2.lastModified()));
		System.out.println("lastModified=="+time);
	}
}

运行结果:

在这里插入图片描述

package com.wangxing.test1;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestFile4 {

	public static void main(String[] args)throws Exception {
		/*
		//得到指定的文件夹下的文件和子文件夹名称
		String path="F:"+File.separator+"20200728"+File.separator+"java基础"+File.separator+"20200822java(19)";
		File file1=new File(path);
		String names[]=file1.list();
		for(String name:names) {
			System.out.println(name);
		}
		*/		
		//得到指定的文件夹下的文件和子文件夹对象
		String path="F:"+File.separator+"20200728"+File.separator+"java基础"+File.separator+"20200822java(19)";
		File file1=new File(path);
		File files[]=file1.listFiles();
		for(File f:files) {
			//得到子文件/子文件夹的名称
			String name=f.getName();
			//得到子文件/子文件夹的修改时间
			String time=new SimpleDateFormat("yyyy/MM/dd E HH:mm").format(new Date(f.lastModified()));
			//判断文件对象是否是一个文件
			String len="";
			String type="";
			if(f.isFile()) {
				len=f.length()+"字节";
				type=getType(name);
			}
			StringBuilder stringBuilder=new StringBuilder();
			stringBuilder.append(name+"\t");
			stringBuilder.append(time+"\t");
			stringBuilder.append(type+"\t");
			stringBuilder.append(len);
			System.out.println(stringBuilder.toString());
		}
	}
	/**
	 * 得到文件类型
	 * @param name
	 * @return
	 */
	public  static  String getType(String name) {
		String type="";
		String houz=name.substring(name.lastIndexOf("."));
		if(houz.equalsIgnoreCase(".mp4")) {
			type="MP4文件";
		}
		if(houz.equalsIgnoreCase(".docx")) {
			type="DOCX文档";
		}
		if(houz.equalsIgnoreCase(".chm")) {
			type="编译的html文件";
		}
		if(houz.equalsIgnoreCase(".java")) {
			type="java源文件";
		}
		if(houz.equalsIgnoreCase(".html")) {
			type="网页文件";
		}
		return type;
	}
}

运行结果:
在这里插入图片描述

二、IO流的划分与区别【字节流与字符流】

  IO流用来读写文件的内容
  流 —> 数据的流动轨迹。

  1. 按照数据的流动方向

  输入流—将数据读取到我们的处理程序中所形成的数据的流动轨迹就是输入流【读取数据】
  输出流—将我们程序处理以后的数据写出到某一个文件中所形成的数据的流动轨迹就是输出流【写出数据】

  2. 按照每一次读写数据的大小

  字节流—每一次读写一个字节【8位2进制】的数据量的流【字节流】
  由于所有的数据都可被换算成字节,所以字节流是可以读写任何类型的数据 【文本,视频,音频,图片】
  字符流—每一次读写一个字符【16位2进制】的数据量的流【字符流】
不能读写任何类型的数据,只能读写文本类型的数据。

IO流的综合划分
在这里插入图片描述

总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值