IO学习一(File类)

IO学习之File类

一、IO介绍

简介:
在java程序中,对数据的输入输出操作以“流”方式进行。
J2SDK提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。java“流”类一般位于java.io包中。
核心类:
在整个java.io包中,最重要的就是5个类和3个接口。

说明
File文件类
InputStream字节输入流
OutputStream字节输出流
Reader字符输入流
Writer字符输出流
Closeable关闭流接口
Flushable刷新流接口
Serializable序列化接口

流分类:

  • 按方向:
    输入流:数据源到程序(InputStream、Reader)
    输出流:程序到目的地(OutputStream、Writer)
  • 按数据:
    字节流:按照字节读取数据(InputStream、OutputStream)
    在这里插入图片描述
    字符流:按照字符读取数据(Reader、Writer)
    在这里插入图片描述
  • 按功能
    节点流:可以从数据源或目的地读取数据
    处理流(包装流):不直接连接到数据源或目的地,是其它流进行包装(简化操作,提高性能)

二、File

(一)
在这里插入图片描述
例题:

import java.io.File;
/*
 * 名称或路径
 * getName():名称
 * getPath():看构建的时候 相对或绝对
 * getAbsolutePath():始终绝对
 * getParent():上一路径,无时返回null
 * 
 * 文件的状态
 * 1、不存在
 * 2、存在
 *    文件:isFile
 *    文件夹:isDirectory
 * 
 * length():字节数
 * 
 */
public class FileDemo03 {
	public static void main(String[] args){
		File src=new File("D:/JavaDate/Test/Test1/9.jpg");
		System.out.println("名称"+src.getName());
		System.out.println("路径"+src.getPath());
		System.out.println("相对路径"+src.getAbsolutePath());
		System.out.println("父路径"+src.getParent());
		System.out.println("父对象"+src.getParentFile().getName());
		
		System.out.println("是否存在"+src.exists());
		System.out.println("是否文件"+src.isFile());
		System.out.println("是否文件夹"+src.isDirectory());
		
		System.out.println("长度"+src.length());
	}
}
import java.io.File;
import java.io.IOException;
/*
 * 其他信息
 * createNewFile();不存在才创建
 * delete();删除已经存在的文件
 */
public class FileDemo06 {
	public static void main(String[] args) throws IOException{
		File src=new File("D:/JavaDate/Test/Test1/io.txt");
		boolean flag=src.createNewFile();
		System.out.println(flag);
		//不是文件夹
		src=new File("D:/JavaDate/Test/Test");
		flag=src.createNewFile();
		System.out.println(flag);
		
		flag=src.delete();
		System.out.println(flag);
	}
}

(二)
在这里插入图片描述

import java.io.File;
/*
 * 创建目录
 * 1、mkdir():确保上级目录存在,不存在创建失败
 * 2、mkdirs():上级目录可以不存在,不存在一同来创建
 * 
 * 列出下一级
 * 1、list():列出下级名称
 * 2、listFiles():列出下级File对象
 * 列出所有的盘符
 * listroot()
 * 
 */
public class DirDemo01 {
	public static void main(String[] args){
		File dir=new File("D:/JavaDate/Test/Test1/dir/test");
		boolean flag=dir.mkdirs();
		System.out.println(flag);
		
		File dir=new File("D:/JavaDate/Test/Test1");
		//列出下级名称 list
		String[] subNames=dir.list();
		for(String s:subNames){
			System.out.println(s);
		}
		System.out.println();
		//下级对象 listFiles()
		File[] subFiles=dir.listFiles();
		for(File s:subFiles){
			System.out.println(s.getAbsolutePath());
		}
		System.out.println();
		//所有盘符
		File[] roots=dir.listRoots();
		for(File r:roots){
			System.out.println(r.getAbsolutePath());
		}	
	}
}
import java.io.File;
/*
 * 递归:方法自己调用自己
 * 打印子孙级目录和文件名称
 */
public class DirDemo03 {
	public static void main(String[] args){
		File src=new File("D:\\JavaDate\\Test\\Test1");
		printName(src,0);
	}
	//打印子孙级目录和文件的名称
	public static void printName(File src,int deep){
		//控制层次感
		for(int i=0;i<deep;i++){
			System.out.print("-");
		}
		//打印名称
		System.out.println(src.getName());
		if(null==src||!src.exists()){//递归头
			return;
		}else if(src.isDirectory()){//目录
			for(File s:src.listFiles()){
				printName(s,deep++);//递归体
			}
		}
	}
}

(三)
文件编码
字符集:java字符使用16位的双字节存储,但是在实际文件存储的数据有各种字符集,需要正确操作,否则就有乱码的发生。
在这里插入图片描述
例题:

import java.io.UnsupportedEncodingException;
/*
 * 编码:字符串...>字节
 * 
 */
public class ContentEncode {
	public static void main(String[] args) throws UnsupportedEncodingException{
		String msg="性命生命使命";
		//编码:字节数组
		byte[] datas=msg.getBytes();//默认使用工程的字符集
		System.out.println(datas.length);
			
		//编码:其它字符集
		datas=msg.getBytes("UTF-8");
		System.out.println(datas.length);
	}
}
import java.io.UnsupportedEncodingException;
/*
 * 解码:字节...>字符串
 */
public class ContentDecode {
	public static void main(String[] args) throws UnsupportedEncodingException{
		String msg="性命生命使命";
		//编码:字节数组
		byte[] datas=msg.getBytes();//默认使用工程的字符集
		
		//解码:字符串
		msg=new String(datas,0,datas.length,"GBK");
		System.out.println(msg);
		
		//乱码:
		//1)、字节数不够
		msg=new String(datas,0,datas.length-1,"GBK");
		System.out.println(msg);
		//2)、字符集不统一
		msg=new String(datas,0,datas.length,"utf8");
		System.out.println(msg);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值