java- Java IO
来源:程序员人生 发布时间:2016-08-11 08:28:30 阅读次数:2348次
这是java io 比较基本的1些处理流,除此以外我们还会提到1些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Serializable接口等等1些高级用法极为原理。
1、java io的开始:文件
1. 我们主要讲的是流,流的本质也是对文件的处理,我们按部就班1步1步从文件将到流去。
2. java 处理文件的类 File,java提供了10分详细的文件处理方法,举了其中几个例子,其余的可以去
-
package com.hxw.io;
-
import java.io.*;
-
-
public class FileExample{
-
public static void main(String[] args) {
-
-
createFile();
-
}
-
-
-
-
-
public static void createFile() {
-
File f=new File("E:/电脑桌面/jar/files/create.txt");
-
try{
-
f.createNewFile();
-
System.out.println("该分区大小"+f.getTotalSpace()/(1024*1024*1024)+"G");
-
f.mkdirs();
-
-
System.out.println("文件名 "+f.getName());
-
System.out.println("文件父目录字符串 "+f.getParent());
-
-
}catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
}
2、字节流:
1.字节流有输入和输出流,我们首先看输入流InputStream,我们首先解析1个例子(FileInputStream)。
-
package com.hxw.io;
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.IOException;
-
import java.io.InputStream;
-
public class FileCount {
-
-
-
-
publicstatic void main(String[] args) {
-
-
int count=0;
-
InputStreamstreamReader = null;
-
try{
-
streamReader=newFileInputStream(new File("D:/David/Java/java 高级进阶/files/tiger.jpg"));
-
-
-
-
while(streamReader.read()!=-1) {
-
count++;
-
}
-
System.out.println("---长度是: "+count+" 字节");
-
}catch (final IOException e) {
-
-
e.printStackTrace();
-
}finally{
-
try{
-
streamReader.close();
-
}catch (IOException e) {
-
-
e.printStackTrace();
-
}
-
}
-
}
-
-
}
我们1步1步来,首先,上面的程序存在问题是,每读取1个自己我都要去用到FileInputStream,我输出的结果是“---长度是: 64982 字节”,那末进行了64982次操作!可能想象如果文件10分庞大,这样的操作肯定会出大问题,所以引出了缓冲区的概念。可以将streamReader.read()改成streamReader.read(byte[]b)此方法读取的字节数目等于字节数组的长度,读取的数据被存储在字节数组中,返回读取的字节数,InputStream还有其他方法mark,reset,markSupported方法,例如:
markSupported 判断该输入流能支持mark
和 reset
方法。
mark用于标记当前位置;在读取1定数量的数据(小于readlimit的数据)后使用reset可以回到mark标记的位置。
FileInputStream不支持mark/reset操作;BufferedInputStream支持此操作;
mark(readlimit)的含义是在当前位置作1个标记,制定可以重新读取的最大字节数,也就是说你如果标记后读取的字节数大于readlimit,你就再也回不到回来的位置了。
通常InputStream的read()返回⑴后,说明到达文件尾,不能再读取。除非使用了mark/reset。
2.FileOutputStream 按部就班版, InputStream是所有字节输出流的父类,子类有ByteArrayOutputStream,FileOutputStream,ObjectOutputStreanm,这些我们在后面都会逐一说到。先说FileOutputStream
我以1个文件复制程序来讲,顺便演示1下缓存区的使用。(Java I/O默许是不缓冲流的,所谓“缓冲”就是先把从流中得到的1块字节序列暂存在1个被称为buffer的内部字节数组里,然后你可以1下子取到这1整块的字节数据,没有缓冲的流只能1个字节1个字节读,效力孰高孰低1目了然。有两个特殊的输入流实现了缓冲功能,1个是我们经常使用的BufferedInputStream.)
-
package com.hxw.io;
-
import java.io.*;
-
-
public class FileCopy {
-
-
public static void main(String[] args) {
-
-
byte[] buffer=new byte[512];
-
int numberRead=0;
-
FileInputStream input=null;
-
FileOutputStream out =null;
-
try {
-
input=new FileInputStream("D:/David/Java/java 高级进阶/files/tiger.jpg");
-
out=new FileOutputStream("D:/David/Java/java 高级进阶/files/tiger2.jpg");
-
-
while ((numberRead=input.read(buffer))!=-1) {
-
out.write(buffer, 0, numberRead);
-
}
-
} catch (final IOException e) {
-
-
e.printStackTrace();
-
}finally{
-
try {
-
input.close();
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠