Java的 io流( 十 )


字符打印流
字符打印流有缓冲区,想要自动刷新需要开启
方法名说明
( /File /)
关联字符输出流/文件/文件路径
( , )
指定字符编码
(Write w, auto )
自动刷新
( out, auto , )
指定字符编码且自动刷新
方法名说明
void write(int b)
常规方法,规则和之前的方法一样
void (Xxx xx)
特有方法:打印任意数据,自动刷新,自动换行
void print(Xxx xx)
特有方法:打印任意数据,不换行
void ( ,… args)
特有方法:带有占位符的打印语句,不换行
在构造方法中,能开启自动刷新的参数是比较常用的
public static void main(String[] args) throws IOException, ClassNotFoundException {//注意,要开启自动刷新PrintWriter pw=new PrintWriter(new FileWriter("D:\\我的世界\\a2.txt"),true);pw.println("one");pw.print(111);pw.printf("%sone%s","two","three");pw.close();}
.out创建一个指向控制台的打印流
sout就是调用打印流的方法
这个打印流是不能关闭的,在系统中唯一存在
解压缩流/压缩流
解压缩流就是读取压缩包中的文件
压缩流就是把文件中的数据写道压缩包中
解压缩流
压缩包里的每一个文件在java中都是一个对象
解压的本质就是:把每一个对象按照层级拷贝到本地另外一个文件夹中
:zip压缩包的解压缩流,也是一个高级流
方法名说明
( is)
把基本流包装成高级流
方法名说明
Entry ()
获得文件夹中的文件或子文件夹
public static void main(String[] args) throws IOException{File src=http://www.kingceram.com/post/new File("D:\\我的世界\\three.zip");File dest=new File("D:\\我的世界\\");unzip(src,dest);}public static void unzip(File src,File dest) throws IOException {//创建一个解压缩流用来读取压缩包中的数据ZipInputStream zip=new ZipInputStream(new FileInputStream(src));//中间值,用来记录获取的文件或文件夹对象ZipEntry entry;//getNextEntry会一个一个的遍历压缩包,直到全部遍历完成,返回nullwhile ((entry=zip.getNextEntry())!=null){System.out.println(entry);if(entry.isDirectory()){//entry为文件夹,在目的地创建一个新的文件夹File file=new File(dest,entry.toString());file.mkdirs();}else {//entry为文件,读取压缩包中的文件,放到目的地中File file = new File(dest, entry.toString());FileOutputStream fos=new FileOutputStream(file);int b;while ((b= zip.read())!=-1){fos.write(b);}fos.close();zip.closeEntry();}}zip.close();}
压缩流
public static void main(String[] args) throws IOException {//创建File对象表示要压缩的文件File src=http://www.kingceram.com/post/new File("D:\\我的世界\\a1.txt");//创建File对象表示压缩包的位置File dest=new File("D:\\我的世界\\");toZip(src,dest);}public static void toZip(File src,File dest) throws IOException {ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(new File(dest,"a.zip")));//创建zipEntry对象,表示压缩包中每一个文件和文件夹ZipEntry entry=new ZipEntry("a.txt");//把Zip对象放到压缩包中zos.putNextEntry(entry);FileInputStream fis=new FileInputStream(src);int b;while ((b=fis.read())!=-1){zos.write(b);}zos.closeEntry();zos.close();fis.close();}
public static void main(String[] args) throws IOException {//创建File对象表示要压缩的文件File src=http://www.kingceram.com/post/new File("D:\\我的世界\\aaa");//创建File对象表示压缩包放在哪里File fufile=src.getParentFile();//可以得到src的父级路径System.out.println(fufile);//创建File对象表示压缩包的位置File dest=new File(fufile,src.getName()+".zip");//创建压缩流关联压缩包ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(dest));toZip(src,zos,src.getName());}/**函数作用:获取src的每一个文件,变成ZipEntry对象,放到压缩包中*参数1:数据源*参数2:压缩流*参数3:压缩包内部的路径* */public static void toZip(File src,ZipOutputStream zos,String name) throws IOException {File[] files = src.listFiles();for (File file : files) {if(file.isFile()){//文件,变成Entry对象,放到压缩包中ZipEntry entry=new ZipEntry(name+"\\"+file.getName());//这里不能直接传file,因为file是绝对路径,带盘符的//所以此时就要用到第三个参数,第三个参数代表压缩包内部的路径zos.putNextEntry(entry);//读取文件中的数据,写到压缩包中FileInputStream fis=new FileInputStream(file);int b;while ((b=fis.read())!=-1){zos.write(b);}fis.close();zos.closeEntry();}else {toZip(file,zos,name+"\\"+file.getName());}}}