最近又复习了下JavaIO写了些实例代码都很简单但是能体现大部分方法的用法。
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; try { is = new FileInputStream(file); } catch (FileNotFoundException e1) { e1.printStackTrace(); } String fileName = "E:" + File.separator + "Bullet.java"; OutputStream os = null; try { os = new FileOutputStream(fileName,true); } catch (FileNotFoundException e1) { e1.printStackTrace(); } byte[] b = new byte[10]; int len = 0; try { while((len = is.read(b)) != -1) { os.write(b, 0, len); } os.flush();//强制刷出缓冲区 } catch (IOException e) { e.printStackTrace(); }finally { try { os.close(); } catch (IOException e) { e.printStackTrace(); } try { is.close(); } catch (IOException e) { e.printStackTrace(); } } System.exit(0); } }
package com.wxisme.TestIO; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; /** * 字节流拷贝文件 * @author wxisme * */ public class StreamTwo { public static void main(String[] args) { String path = "E:" + File.separator + "test.txt"; String name = "E:" + File.separator + "Bullet.java"; Reader r = null; try { r = new FileReader(name); } catch (FileNotFoundException e) { System.out.println("创建字符输入流失败"); e.printStackTrace(); } Writer w = null; try { w = new FileWriter(path); } catch (IOException e) { System.out.println("创建字符输出流失败"); e.printStackTrace(); } char[] cbuf = new char[10]; int len = 0; try { while((len = r.read(cbuf)) != -1) { //w.write(cbuf); w.write(cbuf, 0, len); } w.flush();//强制刷出 } catch (IOException e) { e.printStackTrace(); }finally { try { w.close(); } catch (IOException e) { e.printStackTrace(); } try { r.close(); } catch (IOException e) { e.printStackTrace(); } } } }
package com.wxisme.TestIO; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Scanner; /** * 重定向输入输出 实现文件的拷贝 * @author wxisme * */ public class Reset { public static void main(String[] args) throws FileNotFoundException { String src = "E:" + File.separator + "Bullet.java"; String path = "E:" + File.separator + "test.txt"; 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
package com.wxisme.TestIO; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; /** * 使用处理流printStream printWriter * @author wxisme * */ public class StreamFour { public static void main(String[] args) throws IOException { String path = "E:" + File.separator + "test.txt"; 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(); } }
读取单个字符
package com.wxisme.TestIO; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.util.Scanner; /** * 读取单个字符 * @author wxisme * */ public class ReaderOne { public static void main(String[] args) throws IOException { Scanner scan = new Scanner(System.in); String str = scan.next(); Reader r = new StringReader(str); char[] cbuf = new char[10]; while(r.read(cbuf,0,1) != -1) { char c = cbuf[0]; System.out.println(c); } r.close(); } }
转换流
package com.wxisme.TestIO; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; /** * 使用转换流 * @author wxisme * */ public class StreamThree { public static void main(String[] args) throws IOException { /* * 输入流底层使用字节流,然后使用转换流把字节流转换成字符流,并且指定解码字符集。 * 然后把字符流包装成缓冲流,按行读取文件。 * 乱码问题的两个主要原因: * 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(); } }
关闭文件的工具方法的两种写法:
package com.wxisme.TestIO; import java.io.Closeable; import java.io.IOException; /** * 关闭文件资源的工具类 有两种实现方法 可以实现一次关闭多个文件,先打开的文件后关闭 * @author wxisme * */ 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(); } } } } /** * 泛型方法 使用泛型方法和可变参数 * @param io */ public static <T extends Closeable> void closeAll2(Closeable ... io) { for(Closeable temp : io) { if(temp != null) { try { temp.close(); } catch (IOException e) { System.out.println("文件关闭失败"); e.printStackTrace(); } } } } }
时间: 2024-10-13 03:59:01