IO流实现文件的拷贝 几种不同的方法:
复制代码
package com.wxisme.TestIO;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
- 字节流拷贝文本文件
@author wxisme
/
public class StreamOne {
public static void main(String[] args) {String path = "E:" + File.separator + "test.txt"; File file = new File(path); try { file.createNewFile(); } catch (IOException e) { System.out.println("创建文件失败"); e.printStackTrace(); } InputStream is = null; is = new FileInputStream(file); } catch (FileNotFoundException e1) { e1.printStackTrace(); String fileName = "E:" + File.separator + "Bullet.java"; OutputStream os = null; os = new FileOutputStream(fileName,true); byte[] b = new byte[10]; int len = 0; while((len = is.read(b)) != -1) { os.write(b, 0, len); } os.flush();//强制刷出缓冲区 }finally { try { os.close(); } catch (IOException e) { e.printStackTrace(); is.close(); System.exit(0);
}
}
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;- 字节流拷贝文件
public class StreamTwo {
import java.io.PrintStream;String name = "E:" + File.separator + "Bullet.java"; Reader r = null; r = new FileReader(name); } catch (FileNotFoundException e) { System.out.println("创建字符输入流失败"); Writer w = null; w = new FileWriter(path); System.out.println("创建字符输出流失败"); char[] cbuf = new char[10]; while((len = r.read(cbuf)) != -1) { //w.write(cbuf); w.write(cbuf, 0, len); w.flush();//强制刷出 w.close(); r.close();
import java.util.Scanner; - 重定向输入输出 实现文件的拷贝
public class Reset {
public static void main(String[] args) throws FileNotFoundException {
//代码效果参考:http://www.zidongmutanji.com/zsjx/443913.htmlString src = "E:" + File.separator + "Bullet.java"; FileInputStream fis = new FileInputStream(src); System.setIn(fis); PrintStream ps = new PrintStream(new FileOutputStream(path)); System.setOut(ps); Scanner scan = new Scanner(System.in); scan.useDelimiter("\n");//以换行符为分隔符 while(scan.hasNext()) { System.out.println(scan.next());
处理流PrintStrream PrintWriter
import java.io.PrintWriter;
- 使用处理流printStream printWriter
public class StreamFour {
public static void main(String[] args) throws IOException {
读取单个字符PrintStream ps = new PrintStream(new FileOutputStream(path,true)); ps.print("PrintStream"); PrintWriter pw = new PrintWriter(new FileWriter(path)); pw.print("PrintWriter"); pw.close(); ps.close();
import java.io.StringReader; - 读取单个字符
public class ReaderOne {
转换流String str = scan.next(); Reader r = new StringReader(str); while(r.read(cbuf,0,1) != -1) { char c = cbuf[0]; System.out.println(c); r.close();
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException; - 使用转换流
public class StreamThree {
//代码效果参考:http://www.zidongmutanji.com/bxxx/125984.html/* * 输入流底层使用字节流,然后使用转换流把字节流转换成字符流,并且指定解码字符集。 * 然后把字符流包装成缓冲流,按行读取文件。 * 乱码问题的两个主要原因: * 1. 解码字符集与编码字符集不统一 * 2. 读取字节缺少,长度丢失。 */ String path = "E:" + File.separator + "Bullet.java"; BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream( new File(path)),"utf-8")); String str; while((str = br.readLine()) != null) { System.out.println(str); br.close();
关闭文件的工具方法的两种写法:
import java.io.Closeable;
关闭文件资源的工具类 有两种实现方法 可以实现一次关闭多个文件,先打开的文件后关闭
public class CloseAll {/**
- 使用多态 可变参数 可以有多个形参以数组的形式 可变形参必须在所有参数的最后
- @param io
*/
public static void closeAll1(Closeable ... io) {
for(Closeable temp : io) {if(temp != null) { try { temp.close(); } catch (IOException e) { System.out.println("文件关闭失败"); e.printStackTrace(); }
- 泛型方法 使用泛型方法和可变参数
public static void closeAll2(Closeable ... io) {