java IO流

Java  

1  java.io.File 文件系统管理

    1)File类的用途:用于表示文件(目录),只用于表示文件(目录)的信息(名称、大小等)。不能对文件的内容进行访问。

File  代表文件系统中对文件/目录的管理操作(增删改查, CRUD)。


2  java.io.File 基本API

      File(String)------->指定文件名的构造方法

      long length()------->文件的长度

      long lastModified()------>文件最后一次修改的时间

      String getName()--------->返回由此抽象路径名表示的文件或者目录的名称

      String getPath()----------->将此抽象路径名转换为一个路径名字符串

      boolean exists()------------>检查文件或者目录是否存在

      boolean dir.isFile()--------->检查是否是文件

      boolean dir.isDirectory()----->检查是否是目录/文件夹

      boolean mkdir()--------->创建一个目录(文件夹)

      boolean mkdirs()--------->创建一系列目录(Test/sub/sub同时创建3个文件夹)

      boolean delete()---------->删除此抽象路径名表示的文件或目录(如果此路径名表示一个目录,则该目录必须为空才能被删除)

      boolean createNewFile() throw IOException-------->当且仅当不存在具有此抽象路径名指定名称的文件时,则不可分地创建一个新的空文件

      File[] listFile()-------->返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件

用法案例:

package io1;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class Demo2 {

	public static void main(String[] args) throws IOException {
		// File(文件)中常用的方法
		File demo = new File("Demo");
		if(!demo.exists()){
			demo.mkdir();
		}
		File test = new File(demo,"test.txt");
		if(!test.exists()){
			test.createNewFile();
		}
		System.out.println(test.getName());
		System.out.println(test.getParent());
		
		//listFiles():把当前目录下面的所有文件取出来(列举出来)
		File[] files =demo.listFiles();
		System.out.println(Arrays.toString(files));
		
		//将.txt结尾的文件拿出来
		//FileFilter():接口里面包含accept(File aFile)---aFile是否
		//满足条件,如果满足条件则把aFile放到数组当中,返回值是true,反之false
		File[] files2 = demo.listFiles(new FileFilter(){//匿名内部类
			public boolean accept(File aFile) {
				System.out.println(aFile.getName());
				return aFile.getName().endsWith(".txt") && aFile.isFile();
			}			
		});
		System.out.println(Arrays.toString(files2));
		//用来做输出操作的循环语句,很简单,但是不够实用
		//for(元素类型   元素名 :数组):把数组中的每个元素拿出来
		for(File file : files){
			System.out.println(file.getName());
		}
		System.out.println(test.lastModified());
		System.out.println(new Date(test.lastModified()));
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String date1 = sdf.format(new Date(test.lastModified()));
		System.out.println(date1);
		
		System.out.println(test.getPath());//相对路径
		System.out.println(test.getCanonicalPath());//绝对路径
		
		System.out.println(test.length());
		System.out.println(test.canRead());//是否能读
		System.out.println(test.canWrite());//是否能写
		System.out.println(demo.isDirectory());//是否是目录
		System.out.println(demo.delete());//目录是否可以删除
		System.out.println(test.delete());//文件是否可以删除
	}

}

3  回调模式和FIleFilter

    File[ ] listFile(FileFileter)


4  RandomAccessFile 操作文件操作文件内容, 访问文件任意位置

    1)Java 中的文件模型, 文件是byte by byte    数据的集合

 

   data  :  41 42 00 00 00 ff d6 d0  ...

   index :   0   1   2   3   4  5  6  7  8

   pointer:  ^

   2)打开文件, 有两种模式 "rw", "r"

   RandomAccessFile   raf = new  RandomAccessFile(file, "rw");     

   打开文件的时候文件指针默认指向开头 pointer=0

  

   3)写入方法:raf.write(int) 将整数的"低八位"写入到文件中, 指针自动移动到下一个位置,准备再次写入

   4)读取文件:int b= raf.read() 从文件中读取一个byte(8位)填充到int的低八位, 高24位为0,返回值范围正数: 0~255,

      如果返回-1表示读取到了文件末尾! 每次读取后自动移动文件指针, 准备下次读取.

   5) 文件读写完成以后一定关闭文件

   6) 移位运算:>>>    >>  <<

       移动数字

    a >>> 无符号移位,就把数字向右移动,最左边用0补齐

    0000 0010 >>> 1 -------> 0000 0001   向右移动一位除以2

    b >> 数学移位,正数用0补齐,负数用1补齐

    1111 1110 >> 1 --------> 1111 1111

      << 用0填充最后面的位置

    1111 1110 << 1 --------> 1111 1100      向左移动一位乘以2

 5 序列化与基本类型序列化

   int  ------------->  4 byte

   long ----------->  8 byte

   序列化: 将数据转换为 n个byte序列叫序列化: 数据 -------------> n byte

    如:0x7fffffff -----------> [ 7f ff ff ff ]

   反序列化: 将n byte 转换为一个数据的过程: n byte ---------------> 数据

    如: [ 7f ff ff ff ]  ------------> 0x7fffffff


    RandomAccessFile 提供基本类型的读写方法,可以将基本类型序列化到文件和反序列化为数据


6 IO流 (InputStream, OutputStream)

    InputStream, OutputStream 都是抽象类

    InputStream 抽象了应用程序读取数据的方式

    OutputStream 抽象类应用程序写出数据的方式

    EOF = End of File = -1

    输入流基本方法:

    int b = in.read() 读取一个byte 无符号填充到int低八位,-1是EOF

    in.read(byte[] buf) 读取数据填充到buf中

    in.read(byte[] buf, int start, int size)读取数据填充到buf中

    in.close();

   输出流的基本方法:

   out.write(int b) 写出一个byte到流 b的低八位写出到文件

   out.write(byte[] buf) 将缓冲区buf都写入到流

   out.write(byte[] buf, int start, int size)将buf的一部分写到流中.

   out.flush() 清理缓冲

   out.close();  

  文件输入流FileInputStream 继承了InputStream

         FileInputStream 具体实现了在文件上读取数据

  文件输出流FileOutputStream继承了OutputStream

         FileOutputStream 具体实现了在往文件写入数据

用法案例:

package io1;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo4 {

	public static void main(String[] args) throws IOException {
		//往文件中写入内容
		//FileOutPutStream
		//构造方法:FileOutputStream("文件的名字")----->如果文件不存在的话,会自动的创建一个新的文件
		FileOutputStream fos = new FileOutputStream("src/test.txt");
		// 写一个 -1 到文件中:11111111  11111111  11111111  11111111
		int num = -1;
		fos.write(num>>>24);
		fos.write(num>>>16);
		fos.write(num>>>8);
		fos.write(num);
		fos.write('A');
		fos.write('B');
		byte[] gbk = "王祖贤".getBytes("gbk");
		fos.write(gbk);
		fos.close();
		print("src/test.txt");
	}
	public static void print(String fileName) throws IOException{
		//从文件中读取内容:FileInputSteam
		FileInputStream fis = new FileInputStream(fileName);
		//把test中的所有内容全部读取出来,文件末尾EOF = -1
		int b = 0;
		while((b=fis.read())!=-1){
			System.out.println(b);
		}
	}

}

7  DataOutputStream

    DataOutputStream和DataInputStream是对“流”功能的扩展,可以更方便的读取int、long、字符等;类型的数据

    DataOutputStream对基本的输出流功能的扩展,提供了基本数据类型的输出方法,也就是基本数据类型的序列化方法:

      writeInt()

      writeDouble()

       writeUTF()

       DataOutputStream可以理解为“过滤器”

                            DataOutputStream       FileOutputStream

       应用程序 ----------> 过滤器 ------------------> 输出流 ---------------> 文件(Byte)

                                   writeInt(i)                         write()                        ff ff ff fd


 DataOutputStream用法:

package myTest;

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test3 {
	
	public static void main(String[] args) throws IOException {
		String file = "src/test.txt";
		FileOutputStream fos = new FileOutputStream(file);
		DataOutputStream dos = new DataOutputStream(fos);
		//DataOutputStream 扩展了基本流fos的功能
		
		dos.writeInt(5);
		dos.writeInt(-5);
		dos.writeLong(-5L);
		dos.writeDouble(5.0);
		dos.writeUTF("王祖贤");
		dos.writeChars("刘德华");
		
		dos.close();
		IOUtils.printHex(file);

	}

}


8 DataInputStream

    DataInputStream是对基本输入流(InputStream)功能的扩展,它提供基本数据类型的输入方法,就是基本类型的反序列化。

    DataInputStream 是过滤器,只是功能扩展,不能直接读取文件

    DataInputStream提供的方法有:readInt()   readDouble()........

                                        FileInputStream            DataInputStream

      文件(Byte序列) ----------> ------------------> 过滤器  --------------->应用程序

          ff ff ff fd                       write()                         writeInt()                0x7fffffff



待续..................

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值