毕向东基础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
练习!重要!