【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(); } }
读写随机访问文件