【I/O】常见输入输出

 

缓冲输入文件、输出文件

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Test {
    public static void main(String[] args) throws IOException{
        BufferedReader input = new BufferedReader(new FileReader("D:/test.txt"));
        PrintWriter output=new PrintWriter(new BufferedWriter(new FileWriter("D:/test_copy.txt")));
        String s;
        while((s=input.readLine())!=null){
            output.print(s);   //readLine()取出文件的一行内容时,是将换行符是删除了的。
        }
        input.close();
        output.close();  //缓冲区可能仍有内容,不要忘记正确的关闭它。
    }
}

 

从内存中读入(将一个string通过StringReader读入)

import java.io.IOException;
import java.io.StringReader;

public class Test {
    public static void main(String[] args) throws IOException{
        StringReader input = new StringReader("这是一个字符串"); 
        int c;
        while((c=input.read())!=-1){
            System.out.println((char)c);  //read()返回的一个int形式,必须类型转换为char才能正确打印。
        }
        input.close();
    }
}

 

格式化的内存输入,此时需要用到面向字节的I/O类(InputStream)

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException{
        DataInputStream input = new DataInputStream(new ByteArrayInputStream("This".getBytes()));
        while(input.available()!=0){    //判断是否还有剩余的字节。(由于是一个个字节读取,故所有字节都是合法的结果,因此返回值不能用来检测输入是否结束,我们只能使用available判断是否读取完毕。
            System.out.println((char)input.readByte());  //readBytes一次次读入一个字节。还有类似的readChar/readFloat/readDouble/readInt等
        }
    }
}

 

使用DataInputStream来存储和恢复数据

DataInputStream/DataOutputStream可以确保我们读取数据一致(无论平台有多么不同)。这一点是非常重要的。缺点就是我们必须知道流中数据项所在的确切位置。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException{
        DataOutputStream output=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("test.txt")));
        output.writeDouble(3.1415926535);
        output.writeUTF("使用UTF编码");
        output.writeInt(123);
        output.close();
        
        DataInputStream input=new DataInputStream(new BufferedInputStream(new FileInputStream("test.txt")));
        System.out.println(input.readDouble());
        System.out.println(input.readUTF());
        System.out.println(input.readInt());
        input.close();
    }
}

 

读写随机访问文件

 

posted @ 2017-01-24 19:42  hellozay  阅读(363)  评论(0编辑  收藏  举报