java_高级_文件与流

来源:互联网 发布:tgp优化dnf 编辑:程序博客网 时间:2024/06/15 18:18
 文件类
java.io包下都是与文件和流相关的类  i - input输入  o - output输出 


java.io.File类  文件类  
可以操作计算机的文件(文件自身的属性,而不包含文件的内容)


构造方法
File f = new File("完整路径");
File f = new File("c:/haha/1.txt");
File f = new File(File f, String s);
在目录(文件夹)f中,创建文件s
File f = new File(String f, String s);
在目录(文件夹)f中,创建文件s

API方法
f.createNewFile(); 创建一个新文件
如果f指定的某级路径不存在,文件无法创建会抛出IOException
不会覆盖原有文件
f.delete(); 删除文件
f.exist(); 判断文件f是否存在  存在true  不存在false


f.mkdir(); 创建一个文件夹  (如果存在多级文件夹则无法创建)
f.mkdirs(); 创建文件夹 (如果存在多级文件夹,都会进行创建)  -- 推荐使用





canExecute(); 测试文件是否为可执行文件
canRead(); 是否可读
canWrite(); 是否可写   判读只读   返回false -- 只读   返回true -- 可写


f.getName(); 获取文件名
f.getPath(); 获取文件所在的路径(含文件名)
f.getParent(); 获取文件所在的目录(不含文件名)


f.list(); 显示目录f下所有的文件夹名字和文件名
f.listFiles();  目录f下所有的文件夹和文件组成的file数组


f.isFile(); 判断f是否是一个文件
f.isDirectory(); 判断f是否是一个目录(文件夹)
f.isHidden(); 判断f是否是隐藏文件
f.length(); 文件的大小  Byte(字节)
1Byte = 8bit
100Mbps  =  100M bit per second  =  100M bit/s = 12.5MB/s



利用Java代码调用某个可执行程序
Runtime.getRuntime().exec("xxxx");
---------------------------------------------------------------------
练习1:  补全---学生管理系统---的2,3,4功能   利用Map集合,要求使用泛型
练习2:  模拟windows系统中的cmd程序
dir指令,显示某个目录下的所有子目录或文件
文件名      目录/文件     文件大小
1.txt 文件         10B
haha 文件夹       10B


cd.. 返回上一级目录
cd xxx  进入xxx目录


输入某个文件名时,执行该文件

三元表达式      String t = 逻辑表达式 ? "值1" : "值2";
当逻辑表达式的值为true时   t = "值1"
为false时  t = "值2"


int i = 逻辑表达式 ? 1 : 2;
当逻辑表达式的值为true时   i = 1
为false时  i = 2
    流的分类
流的概念:程序或数据在不同媒介之间的传递
流还被称为“管道”


流向:输入流 和 输出流   针对的是程序   进入程序的流是输入流  从程序出去的流是输出流
单位:字节流 和 字符流   字节流控制二进制的内容(计算机文件:包括图片,音乐,视频,WORD,txt等)
字节流每次可以读取1Byte(一个byte型)的数据  以1Byte为单位
字符流控制纯文本的内容(txt)
字符流每次可以读取2Byte(一个char型)的数据  以2Byte为单位
功能:节点流(原始流) 和 处理流(高级流)
节点流:提供了基本的流的功能
处理流:提升流的处理效率和能力,通常处理流不具备单独处理的能力




  输入            输出


字节   InputStream      OutputStream


字符      Reader          Writer



XXXXXInputStream类  表示  实现某个功能的字节输入流
XXXXXOutputStream类 表示  实现某个功能的自己输出流
XXXXXReader     -- 某个字符输入流
XXXXXWriter     -- 某个字符输出流      




文件操作 -- 节点流
FileInputStream
FileOutputStream
write(b,off,len);//b是一个byte型的数组
write(b,0,5);//写出b数组中下标0开始(含0)的5个数据
  
FileReader
FileWriter


缓冲处理 -- 处理流
BufferedInputStream
BufferedOutputStream
只提升传输效率,方法与节点流一致
BufferedReader
BufferedWriter


除了提供一些方便的方法对内容操作之外
缓冲流还提供了流的传输效率




序列化 -- 处理流


将程序中的对象或者数据通过流的方式传递给其他媒介
这个对象必须是可被序列化的对象

一个类如果实现了Serializable接口,该类的对象就是可被序列化的对象
生成类如果需要进行序列化操作,需要生成序列码




序列化只能按照顺序存放多个数据
读取多个数据的时候只能按照顺序读回来,不能"跳"着读

将多个数据保存在一个集合对象中,只序列化集合对象
集合中保存的对象都应该是可被序列化的




transient关键字:被transient关键字修饰的属性是不参与序列化过程




在两个不同的程序(进程)中互相传递对象
在网络中传递对象
在不同的介质中传递对象


ObjectInputStream
ObjectOutputStream



了解
DataInputStream
DataOutputStream


转换 -- 字节转字符
InputStreamReader
OutputSreamWriter






    特定的流的使用
文件流
文件操作 -- 节点流
FileInputStream
FileOutputStream
FileReader
FileWriter
序列化
序列化 -- 处理流
ObjectInputStream
ObjectOutputStream


-------------------------------------------------------
练习1:在D盘的根目录下有一个1.txt文档,文档中有不确定的内容
       将1.txt中出现的文字"a"全部替换成文字"A",将替换后的内容保存至D盘根目录下的2.txt文档




练习2:完成一个方法,可以进行文件的剪切操作
D:/1.jpg  ->  E:/1.jpg


复制
删除原始文件


练习3:学生管理系统   将数据进行序列化操作
6.保存            ---   序列化    程序 -> 文件
7.保存并退出      ---   序列化    程序 -> 文件


程序开始运行时    ---   反序列化  文件 -> 程序
0 0