输入与输出(I/O流)

流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流

File类

基本内容: File类是java.io包中唯一代表磁盘文件本身的对象,可通过调用File类中的方法实现对文件的一系列操作。

创建文件对象方法:

(1)File(String pathname)
(2)File(String parent,String child)
(3)File(File f,String child)

createNewFile(): 若文件存在,则返回false;若不存在,则返回true并新建该文件。

import java.io.File;

public class WenJian {
    public static void main(String[] args) {
        File F=new File("Word.txt");
        if(F.exists())
        {
            F.delete();
            System.out.println("文件已删除");
        }
        else
        {
            try{
                F.createNewFile();
                System.out.println("文件已创建");
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

FileInputStream类与FileOutputStream类

基本内容: InputStream类和OutputStream类为字节流,提供了基本的文件写入能力。

import java.io.*;

public class XieWenJian {
    public static void main(String[] args) throws IOException {
        File F = new File("Word.txt");
        F.createNewFile();
        FileOutputStream out = new FileOutputStream(F);
        byte buy[] = "Hello,TS!".getBytes();
        out.write(buy);
        out.close();
        FileInputStream in = new FileInputStream(F);
        byte sell[] = new byte[1024];
        int len = in.read(sell);
        System.out.println("文件中的信息是:" + new String(sell, 0, len));
        in.close();
    }
}

FileReader类与FileWriter类

基本内容: Reader类和Writer类为字符流,FileInputStream类与FileOutputStream类只提供了对字节或字节数组的读取方法。由于汉字在文件中占用两个字节,使用字节流可能会出现乱码情况,采用字符流可避免此乱码现象。

import java.io.*;

public class ZuoWenJian {
    public static void main(String[] args) throws IOException {
        File F=new File("HONOR.txt");
        F.createNewFile();
        FileReader in=new FileReader(F);
        FileWriter out=new FileWriter(F);
        String A="Hello,TS!";
        out.write(A);
        out.close();
        char[] C=new char[1024];
        in.read(C);
        in.close();
        System.out.println(new String(C));
    }
}

缓存输入/输出流

基本内容: 缓存是I/O流的一种性能优化,为I/O流增加了缓存区,提高了读取效率。

BufferedInputStream类与BufferedOutputStream类:

import java.io.*;

public class GaoWenJian {
    public static void main(String[] args) throws IOException {
        File F = new File("Word.txt");
        F.createNewFile();
        FileOutputStream out = new FileOutputStream(F);
        BufferedOutputStream OUT=new BufferedOutputStream(out);
        byte buy[] = "Hello,TS!".getBytes();
        OUT.write(buy);
        OUT.close();
        FileInputStream in = new FileInputStream(F);
        BufferedInputStream IN=new BufferedInputStream(in);
        byte sell[] = new byte[1024];
        int len = IN.read(sell);
        System.out.println(new String(sell, 0, len));
        in.close();
    }
}

BufferedReader类与BufferedWriter类:

import java.io.*;

public class NongWenJian {
    public static void main(String[] args) throws IOException {
        File F=new File("HONOR.txt");
        F.createNewFile();
        FileReader in=new FileReader(F);
        FileWriter out=new FileWriter(F);
        BufferedWriter OUT=new BufferedWriter(out);
        BufferedReader IN=new BufferedReader(in);
        String A="Hello,TS!";
        OUT.write(A);
        OUT.close();
        char[] C=new char[1024];
        IN.read(C);
        IN.close();
        System.out.println(new String(C));
    }
}

数据输入/输出流

基本内容:数据输入输出流是基本输入输出字节流的子类, DataInputStream类和DataOutputStream类允许应用程序以与机器无关的方式从底层输入流中读取基本Java类型。(也就是说,当读取一个数据时不必再关心这个数值是哪种字节)

DataOutputStream类提供了三种写入字符串的方法:

Java中的字符是Unicode编码,为双字节

(1)writeBytes(String s): 将字符串中的每一个字符的低字节内容写入目标设备中

(2)writeChars(String s): 将字符串中的每一个字符的两个字节的内容都写到目标设备中

(3)writeUTF(String s): 将字符串按照UTF编码后的字节长度写入设备,然后才是每一个字节的UTF编码

import java.io.*;

public class ShuWenJian {
    public static void main(String[] args) throws IOException {
        File F=new File("HONOR.txt");
        F.createNewFile();
        FileOutputStream FO=new FileOutputStream(F);
        DataOutputStream DO=new DataOutputStream(FO);
        FileInputStream FI=new FileInputStream(F);
        DataInputStream DI=new DataInputStream(FI);
        DO.writeUTF("writeUTF()方法写入数据");
        DO.writeChars("writeChars()方法写入数据");
        DO.writeBytes("writeBytes()方法写入数据");
        System.out.println(DI.readUTF());
        DO.close();
    }
}

ZIP压缩输入/输出流

ZIP压缩管理文件(ZIP archive)是一种十分典型的文件压缩形式,使用它可以节省存储空间。ZIP压缩的I/O实现,在Java的内置类中提供了实用的相关类。

压缩文件:

import java.io.*;
import java.util.zip.*;

public class MyZip {
    private void zip(String zipFileName, File inputFile)throws Exception{
        ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));
        zip(out,inputFile,"");
        System.out.println("压缩中...");
        out.close();
    }
    private void zip(ZipOutputStream out, File f, String base) throws IOException {
        if(f.isDirectory())
        {
            File[] fl=f.listFiles();
            if(base.length()!=0)
            {
                out.putNextEntry(new ZipEntry(base+"/"));
            }
            for(int i=0;i<fl.length;i++)
            {
                zip(out,fl[i],base+fl[i]);
            }
        }
        else
        {
            out.putNextEntry(new ZipEntry(base));
            FileInputStream in=new FileInputStream(f);
            int b;
            System.out.println(base);
            while((b=in.read())!=-1)
            {
                out.write(b);
            }
            in.close();
        }
    }
    public static void main(String[] temp) throws Exception {
        MyZip book=new MyZip();
        book.zip("D:/Hello,TS!.zip",new File("D:/Hello,TS!"));
        System.out.println("压缩完成");
    }
}

解压缩ZIP文件

import jdk.internal.util.xml.impl.Input;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

public class Decompressing {
    public static void main(String[] temp) throws IOException {
        File file=new File("D:/Hello,TS!.zip");
        ZipInputStream zin;
        ZipFile zipFile=new ZipFile(file);
        zin=new ZipInputStream(new FileInputStream(file));
        ZipEntry entry=zin.getNextEntry();
        while(((entry=zin.getNextEntry())!=null)&&!entry.isDirectory()){
            File tmp=new File(entry.getName());
            if(!tmp.exists())
            {
                tmp.getParentFile().mkdirs();
                OutputStream os=new FileOutputStream(tmp);
                InputStream in=zipFile.getInputStream(entry);
                int count=0;
                while((count=in.read())!=-1)
                {
                    os.write(count);
                }
                os.close();
                in.close();
            }
            zin.closeEntry();
            System.out.println(entry.getName()+"解压成功");
        }
        zin.close();
    }
}

Java实现了I/O数据流与网络数据流的单一接口。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值