Java实践(三)---常用的流和文件处理类

来源:互联网 发布:wegame 知乎 编辑:程序博客网 时间:2024/05/16 12:34

在Java.io中的类都将相对路径名解释为以用户工作目录开始

类很文件的概念定义在这里:http://blog.csdn.net/wee_mita/article/details/71157964

1、FileInputStream & FileOutputStream

可以提供辅助在一个磁盘文件上的输入流和输出流,只需要像其构造器提供文件名和文件的完整路径

 try {            FileInputStream fileInputStream = new FileInputStream("file.dat");        } catch (FileNotFoundException e) {            e.printStackTrace();        }        //此时只能从fileInputStream读入字节和字节数组

需要捕获异常,或者声明抛出FileNotFoundException

2、 DataInputStream & DataOutputStream

为了文件读入数字,首选创建一个FileInputStream,然后将其传递给DataInputStream的构造器

 DataInputStream dataInputStream = new DataInputStream(fileInputStream);//fileInputStream在1中创建了 double value = dataInputStream.readDouble();

3、FilterInputStream & FilterOutputStream

这2个文件的子类用于向原生字节流添加额外的功能(如2中的DataInputStream)

可以通过嵌套过滤器来实现多重功能,例如,流在默认情况下是不被缓冲区缓存的,每个对read的调用都会请求操作系统在分发一个字节,相比之下,请求一个数据快并将其置于缓冲区中会显得更加高效

BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);//在1中创建DataInputStream dataInputStream = new DataInputStream(bufferedInputStream);

4、写出文本文件 & 读入文本文件

PrintWriter printWriter = new PrintWriter("file.dat");//两种构造方式一样PrintWriter printWriter1 = new PrintWriter(new FileWriter(":file.dat"));String string = new String("你好!");int year = 2017;printWriter.print(string);printWriter.print(year);
Scanner scanner = new Scanner(System.in);//从键盘输入文本String  string1 = scanner.nextLine();InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"UTF-8");//从文件读入文本并指定编码格式BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String line;while ((line = bufferedReader.readLine())!=null){        String[] tokens = line.split("\\|");        }

5、转码和解码

java.nio包用Charset类统一了对字符集的转换。有了字符集就可以使用包含Unicode码元的Java字符串和编码而成的字节序列之间进行转换

5-1、如何编码Java字符串

String  s = new String("abc");ByteBuffer byteBuffer = Charset.encode(s);//Java 8的nio包中没找到encode()这个方法 byte[] bytes = byteBuffer.array();

5-2、解码字节序列(需要有字节缓冲区)

byte[] bytes1;ByteBuffer byteBuffer1 = byteBuffer.wrap(bytes,1,10);CharBuffer charBuffer = Charset.decode(byteBuffer);//Java 8的nio包中没找到decode()这个方法String string2 = charBuffer.toString();

6、随机访问文件

RandomAccessFile类可以在文件中的任何位置查找或写入数据,磁盘文件都是随机访问的,但是从网络而来的数据流却不是

r : 读入
rw :读写

RandomAccessFile read = new RandomAccessFile("file.dat","r");RandomAccessFile readwrite = new RandomAccessFile("file.dat","rw");

随机访问文件有一个表示下一个将被读入或写出的字节所处位置的文件指针,seek方法可以将这个文件指针设置到文件中的任意字节位置,seek的参数是一个long类型的整数,它的值位于0到文件按照字节来度量的长度之间

7、ZipInputStream & ZipOutputStream

ZIP文档以压缩格式存储了一个或多个文件,每个ZIP文档都有一个头,包含注入每个文件名字和锁使用的压缩方法等信息

需要浏览压缩文档中的每个单独的项,getNextEntry方法可以返回一个描述这些想的ZipEntry类型的对象

FileInputStream fileInputStream1 = new FileInputStream("file.zip" );  ZipInputStream zipInputStream = new ZipInputStream(fileInputStream);        ZipEntry zipEntry;        while ((zipEntry=zipInputStream.getNextEntry())!=null){//            analyze entry;//            read the contents of zipInputStream;            zipInputStream.closeEntry();        }        zipInputStream.close();

在读入单个ZIP项后,不要关闭ZIP输入流,也不要将其传递给可能会关闭它的方法

FileOutputStream fileOutputStream = new FileOutputStream("file.zip");ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);ZipEntry zipEntry1 = new ZipEntry("file1");zipOutputStream.putNextEntry(zipEntry);zipOutputStream.closeEntry();zipOutputStream.close();
原创粉丝点击