File类
- 代表文件或者文件目录
- 创建实例
- new File(String src) : 里面为绝对路径,或相对路径
- File(String parent,String child) : parent目录下的child文件或目录
- File(File file,String child) : file目录下的child文件
- new File(String src) : 里面为绝对路径,或相对路径
- File.separator 根据系统提供分隔符(windows : \ unix: /)
相对路径
- getAbsolutePath() : 获取绝对路径
- getPath() : 获取路径
- getName() : 获取名字
- getParent() : 返回上层目录
- length() : 获取字节长度
- lastModified() :获取 最近修改时间(毫秒数)
- list() : 获取指定目录下的所有文件和文件目录的名称数组 (包含隐藏文件)返回值String[]
- list(new FilenameFilter())里面可以加过滤器
- listFiles() : 获取指定目录下的所有文件和文件目录的File数组 返回值File[]
- renameTo(File dest) : 把文件重命名为指定的文件路径 : dest要他不存在相当于复制(名字是dest名字)
- isDirectory() : 判断是否文件目录
- isFile() : 判断是不是文件
- exists() : 判断是否存在
- canRead() : 判断是否可读
- canWrite() : 判断是否可写
- isHidden() : 判断是否隐藏
- createNewFile() : 创建文件,存在不创建返回false
- delect() : 删除文件或者文件夹(删除文件夹,其下面不能有文件,或者文件目录)
- mkdir() : 创建文件目录,存在不创建,上层目录不存在也不创建
- mkdirs() : 创建文件目录,上层目录不存在,一并创建
- getAbsolutePath() : 获取绝对路径
IO流Input/Output
- 操作流的分类: 字节流/字符流
- 文本文件使用字符流(.txt,.java,.c,.cpp)
- 非文本文件使用字节流(.jpg,.mp3,.mp4,.ppt,.docx…)
- 文本文件使用字符流(.txt,.java,.c,.cpp)
- 数据的流向:输入流/输出流
- 流的角色: 节点流/处理流
FileReader :
- read():数据读入一个字符,达到文件末尾,返回-1 ;
- read(char[] cbuf) : 返回每次读入数组(cbuf)的字符个数,达到末尾返回-1 ;
- 异常的处理:为了保证资源的关闭,需要使用try-catch-finally处理异常
FileWriter :
- 明确存储数据的目的地,文件不存在就自动创建, 文件存在会覆盖
- FileWriter(File file,boolean append) : 其中true就是在文件的基础 上去追加写入内容,而false就是覆盖原来文件,FileWriter(File file) 默认是false;
- 系统的换行符不同所以可以使用 : System.getProperty(“line.separator”)
- 调用Writer对象中的write()写入数据.数据写入临时存储缓冲区中,要使用flush() 进行刷新,写到目的地.close()关闭流,关闭资源.
缓冲流 :
为了提高效率(BufferedInputStream,BufferedOuputStream,BufferedReader,BufferedWriter)
- 资源关闭 : 先关外层的流,再关内存的流(关闭外层流的时候,内层的流会自动关闭,我们可以省略)
- 字符缓冲流(bufferedReader)中有特有的readLine()读取到的数据是不带换行符的可以使用BufferedWriter中newLine()来换行;
- 缓冲的输出流都有一个flush() 来刷新流
- 缓冲输入流中有读取readLine(); — 包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null;
```java FileWriter fw = new FileWriter(“D://MyFile/BuffShow.txt”);BufferedWriter fwbw = new BufferedWriter(fw);
fwbw.write("buffershow");
fwbw.flush();
fwbw.close();
FileReader fw = new FileReader("D://MyFile/Buffshow.txt");
BufferedReader fwbr = new BufferedReader(fw);
String line = null ;
while((line=fwbr.readLine())!=null) {
System.out.println(line);
}
fwbr.close();
//复制的操作(字符流类似)
//读到数组中,再写
FileInputStream fi = new FileInputStream(“D://MyFile/OldMan1.mp3”);
FileOutputStream fo = new FileOutputStream(“D://MyFile/OldMan2.mp3”);
byte[] by = new byte[1024];
int len = 0;
while ((len = fi.read(by)) != -1) {
fo.write(by, 0, len);
}
//使用缓冲流
FileInputStream fi = new FileInputStream(“D://MyFile/OldMan1.mp3”);
BufferedInputStream bffi = new BufferedInputStream(fi);
FileOutputStream fo = new FileOutputStream(“D://MyFile/OldMan2.mp3”);
BufferedOutputStream bffo = new BufferedOutputStream(fo);
byte [] by = new byte[1024] ;
int len= 0 ;
while((len=bffi.read(by))!=-1) {
bffo.write(by, 0, len);
}
//确定好了字节读完,再写,耗费内存
FileInputStream fi = new FileInputStream(“D://MyFile/OldMan1.mp3”);
FileOutputStream fo = new FileOutputStream(“D://MyFile/OldMan2.mp3”);
byte [] by = new byte[fi.available()]; // 确定文件的字节数
fi.read(by);
fo.write(by);
//读一个写一个 FileInputStream fi = new FileInputStream(“D://MyFile/OldMan1.mp3”); FileOutputStream fo = new FileOutputStream(“D://MyFile/OldMan2.mp3”); int ch = 0 ; while((ch=fi.read())!=-1) { fo.write(ch); } ```
/
转换流 : 字节流与字符流之间的转换
- 属于字符流
- InputStreamReader: 将字节的输入流转换成字符的输入流
- OutputStreamWriter: 将字符的输出流转换成字节的输出流
- InputStreamReader: 将字节的输入流转换成字符的输入流
- new InputStreamReader(InputStream in,Charset cs) : in为字节输入流,cs为字符集保存用哪个使用就是用哪个 .
- new OutputStreamWriter(OutputStream in , charset cs); 将输出流采用cs字符集保存
字符集:
- ASCII : 美国标准信息交换码
- ISO8859-1 : 拉丁码表.欧洲码表
- GB2312 : 中国的中文编码表
- GBK : 中文编码表的升级
- Unicode : 国际标准码,融入人类所有的字符
- UTF-8 :变长的编码方式,通用
标准输入,输出流
- System.in : 标准的输入流,默认键盘输入类型InputStream
- System.out : 标准的的输出流,默认控制台输出,类型PrintStream,OutputStream的子类
- setIn(InputStream in) /setOut(PrintStream out) 重新指定输入,输出的流
打印流 : 实现基本数据类型的数据格式转化为字符串输出
- PrintStream() 和 PrintWriter()
- System.out是PrintStream的实例
数据流: 方便操作基本数据类型和String类型数据.
- DataInputStream(InputStream in) ; 读取顺序的必须和写入的一致
- readInt();
- readUTF();
- readInt();
- DataOutputStream(OutputStream out);
- 可以使用writeInt(int ) ; 存储int型
- writeBoolean() ; 存储布尔值
- writeUTF() ; 存储字符串
- 可以使用writeInt(int ) ; 存储int型
对象流:存储基本数据类型和对象处理流
- ObjectInputStream和ObjectOutputStram
- 序列化过程:ObjectOutputStream ,将内存中的java对象保存到磁盘或者网络传播出去,
- writeObject(Object obj);
- writeObject(Object obj);
- 反序列化:ObjectInputStream,将磁盘或者网络中的对象,还原成内存中的一个java对象
- readObject() ;
- readObject() ;
要想对象可以序列化
- 就要实现Serializable接口,
然后在类里面创建全局常量:serialVersionUID ; static final long ;
如果没有加常量,内部是会自动生成,类的实例变量做了修改,serialVersionUID可能发生变化
3.必须保证其内部所有属性也可以序列化,(基本类型都是可序列化的)<br /> 4.不能操作static,transient修饰的成员变量
- 就要实现Serializable接口,
RandomAccessFile
- 继承java.long.Object类,实现Datainput和DataOutput接口
- 即使一个输出流,又是一个输入流
- 内部维护了一个byte[]数组
- 构造方法
- RandomAccessFile(File file, String mode)
- RandomAccessFile(String name, String mode)
- mode为访问模式
- r:只读的方式打开
- rw:打开以便读取和写入
- rwd:打开便读取和写入,同步文件内容的更新
- rws:打开以便读取和写入,同步文件内容和元数据的更新
- r:只读的方式打开
- mode为访问模式
- RandomAccessFile(File file, String mode)
- 作为输出流出现,不存在则创建,存在就对原来里面的内容进行覆盖.
- seek(int pos); 将指针移动到pos位置,
- getFilePointer();获得指针位置
序列流(SequenceInputStrea)
可将多个读流写入一个写流
Enumeration
SequenceInputStream sis = new SequenceInputStream(这里面是枚举对象);
(操作数组)
ByteArrayInputStream,ByteArrayOutputStream
CharArrayInputStream, CharArrayOutputStream
StringReader, StringWriter
操作内存的不需要关闭流;