io流的典型使用方式

import java.io.*;
import java.util.LinkedList;

public class BufferinputFile {
    public static String read(String filename) throws IOException {
        //缓冲流读取字符串
        BufferedReader in = new BufferedReader(new FileReader(filename));
        String s;
        LinkedList<String> linkedList = new LinkedList<>();
        StringBuilder sb = new StringBuilder();

        while((s = in.readLine())!=null)
            //sb.append(s + "\n");
            linkedList.addFirst(s.toUpperCase());

        in.close();
        for(String tp:linkedList){
            System.out.println(tp);
            //tp.indexOf(" ");字符串包含另一个字符串
        }
        return linkedList.toString();
    }
    public static void main(String... args) throws IOException{
//        //缓冲流
//        read("src/com/FileTest/BufferinputFile.java");
//        System.out.println("--");
//        //StringReader 将字符串转换成流
//        StringReader stringReader = new StringReader("hello world");
//        int c;
//        while((c=stringReader.read())!=-1)
//            System.out.print((char)c);
        //读取格式化数据 DataInputStream
        DataInputStream dataInputStream = new DataInputStream(System.in);
        System.out.println(dataInputStream.readByte());
        dataInputStream.close();
    }
}

注意绝对路径和相对路径
相对路径从该项目开始 src/com/company/xxx.txt;

import java.io.*;
import java.util.Scanner;

public class BasicFileOutput {

    public static void main (String...args)throws IOException {
        String filename = "src/sww1.txt";
        //BufferedReader in = new BufferedReader()
        PrintWriter out = new PrintWriter(
                new BufferedWriter(new FileWriter(filename))
        );
        //自动?!
        //PrintWriter out1 = new PrintWriter(filename);
        int lineCount = 1;
        String s;
        Scanner in = new Scanner(System.in);

        while(in.hasNext()){
            if(!(s=in.next()).equals("exit"))
                out.println(s);
            else break;
        }
        out.close();
        in.close();
    }
}

读取二进制

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

//读取二进制文件
public class BinaryFile {
    public static byte[] read(File bfile) throws IOException{
        try (BufferedInputStream bf = new BufferedInputStream(new FileInputStream(bfile))) {
            byte[] data = new byte[bf.available()];//available返回bf可以无阻塞读取的最大字节数
            bf.read(data);
            return data;
        }
//         try{
//            byte[] data = new byte[bf.available()];
//            bf.read(data);
//            return data;
//        }finally {
//            bf.close();
//        }
//        try(BufferedInputStream bf = new BufferedInputStream(new FileInputStream(bfile))){
//            byte[] data = new byte[bf.available()];
//            bf.read(data);
//            return data;
//        }
    }
    public static byte[] read(String bfile) throws IOException{
        return read(new File(bfile).getAbsoluteFile());
    }
}

DataOutputStream

import java.io.*;

public class StrongAndRecoveringData {
    public static void main(String...args) throws IOException {
        DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("Data.txt")));
        out.writeDouble(3.15159);
        out.writeUTF("That was p1");
        out.writeDouble(1.41413);
        out.writeUTF("Square root of 2");
        out.close();
        DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("Data.txt")));
        System.out.println(in.readDouble());
        System.out.println(in.readUTF());
        System.out.println(in.readDouble());
        System.out.println(in.readUTF());
    }
}

标准输入输出

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

/*
  从标准输入中读取
  将System.out转换为PrintWriter
*/
//System.in为InputStream
//System.out为OutputStream
public class Echo {
    public static void main(String...args) throws IOException {
        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(System.out,true);//第二个参数“autoFlush”不写的话可能得不到输出
        String s;
        while((s = stdin.readLine())!=null&&s.length()!=0)
            out.println(s);
        out.close();
        stdin.close();
    }
}

重定向

import java.io.*;

public class Redirecting {
    public static void main(String...args) throws IOException {
        PrintStream console = System.out;
        BufferedInputStream in = new BufferedInputStream(
                new FileInputStream("src/com/FileTest/Redirecting.java")
        );
        PrintStream out = new PrintStream(new BufferedOutputStream(
                new FileOutputStream("test.out")
        ));
        System.setIn(in);//system.in重定向到文件 Redirecting.java
        System.setOut(out);//将system.out重定向到文件 test.out
        System.setErr(out);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while((s = br.readLine())!=null)
            System.out.println(s);
        out.close();//关闭
        System.setOut(console);//将system.out恢复
    }
}

RandomAccessFile

import java.io.IOException;
import java.io.RandomAccessFile;
/*RandomAccessFile实现DataInput和DataOutput 不能再使用其他装饰类*/
/* 构造函数第二个参数 r表示只读 rw表示读写*/
/* 使用seek() 可以使文件指针移动*/
public class UsingRandomAccessFile {
    static String file = "rtest.dat";
    static void display() throws IOException {
        RandomAccessFile rf = new RandomAccessFile(file,"r");
        for(int i = 0;i<7;i++)
            System.out.println("Value " + i + " :" + rf.readDouble());
        System.out.println(rf.readUTF());
        rf.close();
    }
    public static void main(String...args) throws IOException{
        RandomAccessFile rf = new RandomAccessFile(file,"rw");
        for(int i = 0;i<7;i++)
            rf.writeDouble(i*1.414);
        rf.writeUTF("the end of the file");
        rf.close();
        display();
        rf = new RandomAccessFile(file,"rw");
        rf.seek(5*8);
        rf.writeDouble(47.0001);
        rf.close();
        display();
    }
}

文件的一个工具

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.TreeSet;

public class TextFile extends ArrayList<String> {
    //Read a file as a single string:
    //将filename的所有信息读入String
    public static String read(String filename){
        StringBuilder sb = new StringBuilder();
        try{
            //getAbsoluteFile(): 返回一个File对象 包含绝对路径
            BufferedReader in = new BufferedReader(new FileReader(new File(filename).getAbsoluteFile()));
            try{
                String s;
                while((s = in.readLine())!=null) {
                    sb.append(s);
                    sb.append("\n");
                }
            }finally {
                in.close();
            }
        }catch(IOException e){
            throw new RuntimeException(e);
        }
        //返回绝对路径 String类型
        //System.out.println(new File(filename).getAbsolutePath());
        return sb.toString();
    }
    //写入文件  若没有就创建
    public static void write(String filename,String text){
        try{
            //PrintWriter 创建文件
            PrintWriter out = new PrintWriter(new
                    File(filename).getAbsoluteFile());
            try{
                out.print(text);
            }finally {
                out.close();
            }
        }catch(IOException e){
            throw new RuntimeException(e);
        }
    }
    //Read a file, split by regular expression:
    //把filename的内容全放入到TextFile中
    public TextFile(String filename,String splitter){
        super(Arrays.asList(read(filename).split(splitter)));
        if(get(0).equals(""))
            remove(0);
    }
    //Normally read by lines:
    public TextFile(String filename){
        this(filename,"\n");
    }
    public void write(String filename){
        try{
            //对比上一个write
            // 这里运用java7以上的关闭资源的方法:
            // try后面写需要打开的资源(需要实现AutoCloseable) 然后结束后自动关闭
            //...参考core java 第七章
            try (PrintWriter out = new PrintWriter(new File(filename).getAbsoluteFile())) {
                for (String item : this)
                    out.println(item);
            }
        }catch(IOException e){
            throw new RuntimeException(e);
        }
    }
    //simple test:
    public static void main(String[] args){
        /*将文件内容存入String*/
        String file = read("src/com/FileTest/TextFile.java");
        /*将String内容读入文件*/
        write("test.txt",file);
        /*将文件内容存入TextFile*/
        TextFile textFile = new TextFile("test.txt");
        /*将TextFile的内容写入文件*/
        textFile.write("test2.txt");
        TreeSet<String> words = new TreeSet<>(
                new TextFile("src/com/FileTest/TextFile.java","\\W+"));
        System.out.println(words.headSet("a"));
    }
}

压缩与解压

package com.FileTest;

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

public class FileZip {
    public static void main(String...args) throws Exception{
        //定义要压缩的文件
//        File file = new File("test.txt");
//        //定义压缩文件名称
//        File zipFile = new File("sww.zip");
//
//        InputStream input = new FileInputStream(file);
//        ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
//        //压缩后的文件名称
//        zipOut.putNextEntry(new ZipEntry(file.getName()));
//        //设置注释
//        zipOut.setComment("设置注释");
//
//        //压缩过程
//        int temp = 0;
//        while((temp = input.read())!=-1){
//            zipOut.write(temp);
//            System.out.print((char)temp);
//        }
//        input.close();
//        zipOut.close();

        /*解压*/
        ZipInputStream input1 = new ZipInputStream(new FileInputStream("sww.zip"));
        //以下ZipEntry entry = input1.getNextEntry(); 这句话必须写,获得压缩包子文件
        ZipEntry entry = input1.getNextEntry();
        OutputStream zipout = new FileOutputStream("sww1.txt");
        int t = 0;
        while((t = input1.read())!=-1){
            zipout.write(t);
            System.out.print((char)t);
        }
        input1.close();
        zipout.close();
    }
}

ZipEntry entry = input1.getNextEntry();
entry获取压缩包的具体文件
若在解压缩操作中去掉,解压出的文件为空
ZipEntry 类用于表示 ZIP 文件条目
基础详见文档
未完待续

发布了23 篇原创文章 · 获赞 4 · 访问量 849

猜你喜欢

转载自blog.csdn.net/qq_43656529/article/details/100823950