黑马程序员 Java--IO流

------- android培训java培训、期待与您交流! ----------

毕向东基础18-01

 

毕向东基础18-02

Runtime:

Process.dstroy();//杀死当前进程。

 

 

 

 

 

毕向东基础18-03

毕向东基础18-04

Calendar.add();//计算当前日期的几天前      或几天后的日期。智能增减年月。

 

毕向东基础18-05

Math:

Math.ceil(double d);//返回数轴上d右边最近的一个整数。

Math.floor(double d);//返回数轴上d左边最近的一个整数。

Math.round(double d);//四舍五入。

java.util.Random:

Int d = Random.nextInt(10)+1;//随机1-10(含1和10)。

 

毕向东基础18-06

编码表:10101111。。。数字对应x字母 的表;

字节:InputStream,OutputStream.

字符:Reader,Writer.

 

毕向东基础18-07

read();write();//java其实是在调用系统资源来进行读写,因为java本身不知道在不同的平台怎么读写。

 

毕向东基础18-08

IOException处理:

 

毕向东基础18-09

续写数据。

FileWriter fw = new FileWriter(“c:sjdhgjh.txt”,true);//不覆盖。

 

毕向东基础18-11

 

毕向东基础19-01

BufferedWriter:

BufferedWriter.newLine();//跨平台可换行。 封装了不同平台的换行符。

 写一次刷一次。若写完再刷的情况下,写的时候突然停电等突发事件导致程序崩溃,目标文件会没有写进东西。

 

毕向东基础19-02

BufferedReader.readLine();//末尾返回null。

 

毕向东基础19-03

BufferedReader.readLine();//返回的是字符串。并且不带换行符。

毕向东基础19-04

BufferedReader.readLine();//原理,读到换行符就认为是一行结束了。

 

 

毕向东基础19-06

BufferedReader.readLine()是对Reader.read()的增强,这种设计模式叫做装饰设计模式。

一般装饰类会把基于的那个类当作参数传进来。

 

 

毕向东基础19-07

 

毕向东基础19-09

LineNumberReader:

LineNumberReader.setLineNumber(inti);LineNumberReader.getLineNumber();

 

毕向东基础19-10

FileOutputStream.write();//字节流写文件不用flush()。

 

毕向东基础19-11

FileInputStream.available();//返回文件的字节数。

注意:文件过大时,不能用此方法。。。。。。如:3G的电影。。

 

毕向东基础19-14

BufferedInputStream.read();读取到数据最后会返回-1。但是读数据时是用byte[]存放,若刚好读到1111-1111,也等于-1,所以将读到的数据提升为int,再将读取的数据b&255 就可以得到有效的8位数据。输出的时候只把有效的数据输出就可以了(把前面的0都砍掉)。

 

毕向东基础19-16

输入转换流:

BufferedInputReader(InputStreamin):

由于缓冲字符输入流(只接受字符流做构造参数)有readLine();功能很好用,字节流也想用,所以字节流就要转换成字符流。

InputStream in = System.in;

InputStreamReader isr = new InputStreamReader(in);

BufferedReader br = new BufferedReader(isr);

br.readLine();

BufferedReader br = new BufferedReader(newInputStreamReader(System.in));

 

毕向东基础19-17

输出转换流:

OutputStream out = System.out;

OutputStreamWriter osw = new OutputStreamWriter(out);

BufferedWriter bw = new BufferedWriter(osw);

bw.write();

bw.newLine();

bw.flush();

 

BufferedWriter bw = new BufferedWriter(newOutputStreamWriter(System.out));

 

 

毕向东基础19-18

 

毕向东基础19-19

一般需要字符编码转换时,需要用转换流。

OutputStreamWriter.write(“你好”,“UTF-8”/“GBK”);

 

转换流InputStreamReader有一个子类FileReader,可以直接读取中文字符,因为他把编码表写死为GBK,所以不能用自己想指定的编码表读取数据。

因此,还是用父类InputStreamReader。

 

毕向东基础19-20

更改System输入输出设备:

System.setIn(new FileInputStream(“1.java”));//

System.setOut(new PrintStream(“2.txt”));//

 

 

毕向东基础19-21

异常记录:

 

毕向东基础20-01

IO流只能处理文件中的数据,不能处理文件及其属性,还有文件目录。

所以将文件及目录封装为File类。

 

毕向东基础20-02

 

毕向东基础20-03


 

毕向东基础20-04

 

renameTo(File f);//可以剪切文件。

 

毕向东基础20-05

Flie.listRoots();//列出有效盘符。

 

毕向东基础20-07

递归列出文件夹目录

 

递归算十进制转二进制

 

毕向东基础20-08


 

 

毕向东基础20-09

删除目录(windows规定,里面有内容不能直接删,所以要从里往外删,因此用到递归):

 

毕向东基础20-13

重要!

容器与IO流关联的一个类,Properties:

可以直接将文件对象Flie作为参数传给构造函数建立对象。

Properties p = new Properties(File f );


 

毕向东基础20-15

重要!

可以直接将文件对象Flie作为参数传给构造函数建立对象。

PrintStream ps = new PrintStream(File f );

PrintStream ps = new PrintStream(OutputStream out,boolean autoFlush,String encoding);带编码表。

PrintWrite pw = new PrintWrite(File f);

 

毕向东基础20-16

合并流SequenceInputStream:连续读流。

特点:接受Enumeration

 

毕向东基础20-17

切割流:

应用:论坛上传文件,限制单次上传文件大小,分成很多part上传。



 

 

毕向东基础21-01

对象序列化:流操作对象持久化存储。

ObjectOutputStream存的数据只能用ObjectInputStream读出来。

 

 

毕向东基础21-02

PipedInputStream/PipedOutputStream:流与线程关联。


 

毕向东基础21-03

RandomAccessFile:多功能操作文件Flie类。

缺点:只可以操作文件File的数据。多线程操作时,需要文件中存放的数据有规律性(周期性)。

优点:可以读取写入基本数据类型。 可以指定位置读写数据(迅雷多线程下载原理。)

文件相关特性:Mode:r(只读,不会自动创建文件。),rw(读写,自动创建,但不覆盖)。

readInt();readByte();…

writeInt();….


//李四a

//write(258);//乱码。因为只写最低8位。258===1-0000-0010

//writeInt();//可以写四个字节。

//raf.seek(0);//在0位置写数据,若0位置已有数据,会修改0位置的数据;

//raf.seek(8*1);// 在1位置写数据,若1位置已有数据,会修改1未知的数据;

//raf.skipBytes(8);//只能往下面跳,不能往回走。

 

毕向东基础21-04

DataOutputStream/DataInputStream:流与基本数据类型关联。

毕向东基础21-05

操作数据的流。

操作字节数组的流:

ByteArrayInputStream:不与底层系统资源联系,所以不用close(),即使close(),也不会出现IOException。

ByteArrayOutputStream:内部封装了一个字符数组,并且会自己随着数据的写入而延长数组长度。toString(),toByteArray()可以获得数据。

 

操作字符数组的流:

CharArrayInputStream/CharArrayOutputStream。

 

操作字符串的流:

StringReader/StringWriter。

 

毕向东基础21-07

字符编码:

编码:字符串-字节数组。

解码:字节数组-字符串。

服务器上(如Tomcat),用GBK编码,用ISO8859-1解码,会出错。

处理方法:用GBK编码,用ISO解码,再用ISO编码,再用GBK解码,就可以了。

特殊:用GBK编码,用UTF-8解码,再用UTF-8编码,再用GBK解码,不可以,因为UTF-8也支持中文。

毕向东基础21-08

 

毕向东基础21-09

练习!重要!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值