java IO(简介和File api)

java  IO

input输入    output输出

所有的往内存中送数据的都是输入

所有的从内存中出数据的都是输出

 

能用java.io包的api方法操作的输入输出

内存-->外存(硬盘,光盘,u盘)  本地流输出

内存<--外存                          本地流输入

 

结合Socket网络编程

内存-->网络上  网络流输出

内存<--网络上  网络流输入

                 网络流的案例:

                         计算机A        和远程计算机B

                         从计算机B的计算机上下载文件到计算机A上

                         先从B中的硬盘上本地流输入,把硬盘上的文件读入到B的内存

                         把内存中的文件数据网络流输出,把内存数据输出到网络上

                         计算机A网络流输入,把网络上的文件数据读入到A的内存

                         把A的内存中的数据,bendiliushuchudaoA的硬盘上

 

上传文件的过程跟下载是相反的

 

不能用java.io包操作的流

内存-->显示器

内存-->CPU

内存<--CPU

 

数据的持久化:

  1. 数据长时间保留在硬盘上
  2. 数据长时间保存在数据库上,其实数据库本质,是以数据文件的方式持久化到硬盘上

 

在硬盘中的实际体现出来的是文件和目录

java中提供了一个java.io.File类用来操作文件的目录信息和文件的信息

就是不能操作文件的内容

 

根据文件的内容操作分为:

字节流:对文件的内容读写是用字节的方式操作

字符流:对文件的内容读写是用字符流(ascii)的方式操作,但是其本质底层还是用字节流

 

java.io.File类:用户标识文件和目录的,根文件内容无关

注意一个问题:在不用的操作系统上对于目录的间隔符的区分

window:

c:\aa\bb\cc.txt

Linux:

/hone/aa/bb/cc.txt

在java中对路径的分割符的表示

window方式:

c:\\aa\\bb\\cc.txt

c:/aa/bb/cc.txt

Linux方式:

c:/aa/bb/cc.txt

如果想兼容window和Linux

"aa"+File.separator+"bb"+File.separator+"cc.txt"

 

File的api:

-构建File类对象

File(String filePath);

File(File Parent,String child);

File(String parentName,String child);

-isFile()

判断是否是文件

-isDirectory()

判断是否是目录

-length()

获取文件的长度

-exists()

判断文件或目录是否存在

-createNewFile()

创建一个空文件

返回值是boolean

如果指定的文件不存在,就创建文件并返回true

如果指定的文件存在,则返回false

-delete()

删除文件

注意:

如果File表示一个目录

删除的时候,要保证目录必须是空的

-mkdir()

创建一个目录

-mkdirs()

创建多个目录

-listFile()

返回指定目录中的所有文件和目录

-listFiles(FileFilter)

返回指定目录中的部分文件和目录,用FileFilter设定筛选条件

-listFile(FilenameFileFilter)

返回指定目录中的部分文件和目录,用FilenameFileFilter设定筛选条件

总结:

只能操作文件或目录的信息

就是不能操作文件的内容

 

RandomAccessFile类:

-可以操作文件的内容

-按照字节操作,字节流

-此类特殊,read读和write写都是此类中的api方法

-能够通过seek方法可以随意移动或改动文件的指针

RandomAccessFile类对文件的随机访问有两种模式

  1. 只读模式
  2. 读写模式

-创建对象

RandomAccessFile(file file,String mode);

       创建从中读取和向其中写入的随机访问流

       文件通过File指定

       模式通过String指定

RandomAccessFile(String name, String mode);

     创建从中读取和向其中写入的随机访问流

     文件通过String指定

     模式通过String指定

                      mode的取值:

                              "r"只读模式  read

                             "rw"读写模式  read write

 

-写入操作

-void write(int d);

此方法会根据当前指针所在的位置处写入一个字节,只能使用整型的低8位

-void write(byte[] buf);

此方法会根据当前指针所在的位置处写入一组字节

-void write(byte[] buf,int offset,int len);

将len个字节从指定的byte数组写入文件,并从偏移量offset处开始

-读取操作:

-int read()

从文件取出一个byte字节,填充到整型的低8位,如果返回-1,表示读取到文件的末尾EOF end of file

-int read(byte[] buf)

从指针指向的位置开始读取若干字节,存储到字节数组中

将读取到的字节按照顺序放在字节数组的相对应的位置

返回值为读取到字节数,也可以说成读取到的长度

返回值为-1,则读取到了末尾

-int read(byte[] buf,int offset,int len);

将最多len个数据字节从文件中读入byte数组中,并从偏移量offset开始存储

-void getFilePointer()

返回文件中的当前的偏移量

-void seek(long position)

设置到此文件开头0到文件指针偏移量,在该位置发生下一个读取或写入操作

-int skipBytes(int n)

用此方法可以跳过一些少量的字节,只能是跳正整数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值