Java基础——I/O
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础——I/O相关的知识,希望对你有一定的参考价值。
文本I/O与二进制I/O
在计算机中所有的文件都是以二进制的形式来存储的,所以本质上所有的文件都是二进制文件。
文本I/O建立在二进制I/O的基础之上,它能提供字符层次的编码和解码的抽象,在写入一个字符时,Java虚拟机会将统一码转化为文件指定的编码,读文件同理。而二进制I/O不需要转化。如果使用二进制I/O向文件写入一个数值,就是将内存中的确切值复制到文件中。
由于二进制I/O不需要编码和解码,所以,二进制I/O比文本I/O效率高。
二进制文件与主机的编码方案无关,因此,它是可移植的。在任何机器上的Java程序可以读取Java程序所创建的二进制文件。
Java 文本I/O
java.io.File file = new java.io.File("hello.java");
文件和目录路径名的抽象表示形式。
File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。
->为在当前目录下的文件hello.txt创建一个File对象
->也可以是明确的绝对路径,如"/Users/zhengbinMac/Workspaces/hello.java"
java.io.PrintWriter = new java.io.PringWriter("File file");
使用指定文件创建不具有自动行刷新的新 PrintWriter。
可用于创建一个文件并向文本文件写入数据。
会报出FileNotFoundException异常。
java.util.Scanner s = new java.util.Scanner(File);
创建一个所产生的值都是从特定文件扫描而来的扫描器
java.util.Scanner s = new java.util.Scanner(String);
创建一个所产生的值都是从特定字符串扫描而来的扫描器
1 public class ReplaceDate{ 2 public static void main(String args[]) { 3 try{ 4 java.io.File f1 = new java.io.File("/Users/zhengbinMac/Workspaces/Revise Java/Files and I:O/123.txt"); 5 System.out.println(f1.exists()); 6 java.util.Scanner input = new java.util.Scanner(f1); 7 java.io.File f2 = new java.io.File("/Users/zhengbinMac/Workspaces/Revise Java/Files and I:O/321.txt"); 8 System.out.println(f2.getAbsolutePath()); 9 java.io.PrintWriter output = new java.io.PrintWriter(f2); 10 String s1 = new String(); 11 if(input.hasNext()){ 12 s1 = input.nextLine(); 13 String s2 = s1.replaceAll("Hello","OK1"); 14 output.println(s2); 15 } 16 input.close(); 17 output.close(); 18 }catch(java.io.FileNotFoundException e){ 19 e.getStackTrace(); 20 } 21 } 22 }
Java 二进制I/O
字节流
Java字节流是用来处理8比特字节的输入和输出。
java.io.FileInputStream(File/String)
java.io.FileOutputStream(File/String)
1 public class CopyFile { 2 public static void main(String[] args) throws java.io.IOException { 3 java.io.FileInputStream in = null; 4 java.io.FileOutputStream out = null; 5 try{ 6 in = new java.io.FileInputStream("input.txt"); 7 out = new java.io.FileOutputStream("output.txt"); 8 int c; 9 while((c = in.read()) != -1){ 10 out.write(c); 11 } 12 }catch(java.io.IOException e){ 13 e.getMessage(); 14 }finally{ 15 if(in != null){ 16 in.close(); 17 } 18 if(out != null){ 19 out.close(); 20 } 21 } 22 } 23
字符流
Java字节流是用来处理8比特字节的输入和输出,而字符流用于处理16位,即FileReader与FileWriter一次读写两个字节。
文件输入流
InputStream f = new FileInputStream("/Users/zhengbinMac/Workspaces");
或
File f = new File("/Users/zhengbinMac/Workspaces");
InputStream f = new FileInputStream(f);
文件输出流
OutputStream f = new FileOutputStream("/Users/zhengbinMac/Workspaces");
或
File f = new File("/Users/zhengbinMac/Workspaces");
OutputStream f = new FileOutputStream(f);
1 import java.io.*; 2 public class fileStreamTest{ 3 public static void main(String args[]){ 4 try{ 5 byte bWrite [] = {11,21,3,40,5}; 6 OutputStream os = new FileOutputStream("test.txt"); 7 for(int x=0; x < bWrite.length ; x++){ 8 os.write( bWrite[x] ); // writes the bytes 9 } 10 os.close(); 11 12 InputStream is = new FileInputStream("test.txt"); 13 int size = is.available(); 14 15 for(int i=0; i< size; i++){ 16 System.out.print((char)is.read() + " "); 17 } 18 is.close(); 19 }catch(IOException e){ 20 System.out.print("Exception"); 21 } 22 } 23 }
以上是关于Java基础——I/O的主要内容,如果未能解决你的问题,请参考以下文章