I/O

临时态的数据不能长期保存,通常掉电就消失
持久化操作方式:
存储到文本文件(记事本)
存储到数据库(mysql、Oracle) 【SQL】
存储到集群(hdfs) 【NoSQL】

【路径】
【绝对路径】
windows下以盘符开头的路径,称为全路径
“c:\abc” <=> “c:/abc”
/ linux系统的根目录
【相对路径】
abc
. 当前目录
… 上一层目录

【exception】 【异常】不正常
编译时检查
file.getCanonicalPath() IOException
运行时检查
Integer.parseInt(“35分”) NumberFormatException

【I/O操作(JAVA )】
【File】
记事本、文件夹、图片、视频……
“抽象” abstract -> 【File】
【文件操作-1:只看文件的属性】不需要打开文件
1)找到(根据路径)
存储位置(存储到哪儿了) 【路径】
jdk8解压到哪儿了?
视频放哪儿了?
2)看File的属性
大小、名称、可读写、路径、最后修改时间……
★看不到文件内容
【文件操作-2:打开文件,操作内容】 Input/Output操作
①查看
输入 I
FileReader
②编辑
输出 O
FileWrite

File (File System,抽象)
所有的东西(含文件夹),看做是File
【根据类型做不同处理】
.isFile()
	File:(d:\\红鲤鱼.txt)
		名、路径、读写属性、大小、最后修改时间(格式化)
	
.isDirectory()【目录遍历】 通常使用“递归”
	File:(d:\\文件夹)
		名、路径、
		文件列表 .listFiles()
【操作文件内容】 Input/Output  [JVM]
☆ 需要打开文件才能进行操作(读取、修改)
1)根据流向(方向)
	输入流(Input)
		FileReader(d:\\红鲤鱼.txt)
			使用.read(char[])读取,返回本次读取的长度
		FileInputStream
		BufferedReader
			.readLine()
	输出流(Output)	
		FileWriter(路径, 是否追加)
			.write()
		FileOutputStream
		BufferedWriter
2)处理的单位(类型)
	字符流  
		单位:char	(通常用于处理文本文件)
		FileReader / FileWriter
	字节流 *
		单位:byte  (通常用于处理非文本文件(二进制),比如图片、压缩包、视频……)
		FileInputStream / FileOutputStream
3)根据用途(必要性)				装饰模式(毛坯房  / 简装、精装、豪装)
	基本流(毛坯房 )
		FileReader / FileWriter
		FileInputStream / FileOutputStream
	增强流(简装、精装、豪装)
		带 缓存区的  流 ☆ 磁盘i/o
			BufferedReader / BufferedWriter
		带 过滤功能	 流
		……

throws
FileNotFoundException
IOException

  1. File

    File file=new File(“local”);

    常用方法:
    file.length(),文件大小,单位Byte
    file.canWrite,是否可写
    file.getName(),获取文件名
    file.getCanonicalPath(),规范路径书写方式(绝对路径)
    file.lastModified(),文件最后修改时间
    // 获取File的最后修改时间,格式:“yyyy-MM-dd HH:mm:ss”

    long lastModified = file.lastModified();
    String formatTm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    		.format( new Date(lastModified));
    

    file.listFiles(),获取文件夹文件列表
    file.getPath(),获取文件路径
    file.isDirectory,文件类型,判断是不是文件夹
    file.isFile(),判断是不是文件

    字符流
    实例:复制文件

        FileReader fin = new FileReader(srcPath);//srcPath,被复制的路径
    	FileWriter fout = new FileWriter(tarPath);//如果文件已经存在,追加
    	//文本那么就写   FileWriter(tarPath,true)
    	char [] buf = new char[100];
    	int iRead = 0;
    	while (-1 != (iRead=fin.read(buf))) {
    		//读取了iRead长度的内容,存放到buf中了
    		//TODO: 将这部分内容写到tar文件
    		//String str = new String(buf, 0, iRead);
    		//fout.write(str);
    		
    		fout.write(buf, 0, iRead);
    	}
    	
    	fout.close();
    	fin.close();
    

    字节流

    FileInputStream fin = new FileInputStream("d:/tnt/红鲤鱼与绿鲤鱼与驴.jpg");
    FileOutputStream fout = new FileOutputStream("e:/tnt/红鲤鱼与绿鲤鱼与驴2.jpg");
    
    byte[] buf = new byte[30];
    int iRead = 0;
    
    while(-1 != (iRead = fin.read(buf))) {
    	//写
    	fout.write(buf, 0, iRead);
    }
    
    fout.close();
    fin.close();
    

I/O的缓存Buffer

	public static void main(String[] args) throws IOException {
//		readOneFile ();

		showBufferedWriter();
		// 【输出到文件】  FileWriter
//		Writer out = new FileWriter("d:/hahaha.txt");
//		BufferedWriter fout = new BufferedWriter(out, 200);
//		
//		fout.write("-----------------");
//		//TODO: buffer???
//		
//		fout.close();
//		out.close();	
	}
	
	/**
	 * @throws IOException
	 */
	public static void readOneFile() throws IOException {
		//打开流 FileReader
		Reader in = new FileReader("d:/红鲤鱼.txt");
		BufferedReader fin = new BufferedReader(in);
		
		// 可以按行读取
		String str1 = null;
		//not including any line-termination characters
		while ( null != (str1=fin.readLine())) {
			System.out.println(str1);
		}
		
		// 关闭流
		fin.close();
		in.close();
	}

	
	/**
	 * 展示BufferedWriter的缓存作用
	 * 
	 * @throws IOException
	 */
	public static void showBufferedWriter() throws IOException  {
		StringWriter s = new StringWriter ();
		BufferedWriter out = new BufferedWriter(s, 5);
		
		// buffer展示
		String str = "1234567890abcde-";
		for (char c: str.toCharArray()) {
			out.write(c);
			System.out.println(s.getBuffer());
		}
		
//		out.flush();//强制刷新,把缓存的内容刷新输出
//		System.out.println(s.getBuffer());
		
		out.close();//关闭的时候,会自动刷新一次缓存
		System.out.println(s.getBuffer());
		
		s.close();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值