java io流
字符流
FileReader
FileWriter
BufferedReader
BufferedWriter
字节流
InputStream OutputStream
FileInputStream FileOutputStream
BufferedInputStream BufferedOutputStream
import java.io.*; public class CopyDemo { public static void main(String args[]) throws IOException { copy_2(); } public static void copy_1() throws IOException { FileWriter fw = new FileWriter("copy.txt"); FileReader fr = new FileReader("litiepeng.txt"); int ch = 0; while((ch=fr.read())!=-1) fw.write(ch); fw.close(); fr.close(); } public static void copy_2() { FileWriter fw = null; FileReader fr = null; try { fw = new FileWriter("copy2.txt"); fr = new FileReader("litiepeng.txt"); char[] buf = new char[1024]; //这里可能太大了,读的数据没把这里装下 int len = 0; while ((len=fr.read(buf))!=-1) { fw.write(buf,0,len); } } catch (IOException e) { throw new RuntimeException("读写失败"); } finally { if (fr!=null) { try { fr.close(); } catch (IOException e) { } } if (fw!=null) { try { fw.close(); } catch (IOException e) { } } } } public static void sop(Object obj) { System.out.println(obj); } }
package pack; import java.io.*; public class DemoTwo { public static void main(String args[]) throws IOException { FileReader fr = new FileReader("litiepeng.txt"); /* * 定义一个字符数组,用于存储读到的字符 该read(char [])返回的是读到字符个数 char[] buf = new char[3]; * int num1 = fr.read(buf); sop("num1 = "+new String(buf)); * 这里如果num1返回1的话,想想会怎么样? * buf里的数据本来是abc 最后读了1个字符d 然后最后的buf是dbc.这时候就不能直接输出buf.只能输出new String(buf,0,num1); * * int num2 = fr.read(buf); sop("num2 = "+new * String(buf,0,num2));//为什么要这样,和上面比较一下就知道了 */ char[] buf = new char[1024]; int num = 0; while ((num = fr.read(buf)) != -1) { sop(new String(buf, 0, num)); } fr.close(); } public static void sop(Object obj) { System.out.print(obj); // 如果打印数据,这里一般用print,不用println因为可以读取一次就换行,但是文件里面不是换行, } }
import java.io.*; public class FileWriterDemo { public static void main(String args[]) { FileWriter fw = null; //这个为什么要放在外面, try { fw = new FileWriter("k:\\demo2.txt"); fw.write("abac"); } catch (IOException e) { sop("catch:"+e.toString()); } finally { try { if(fw!=null) //他为什么要这个 因为如果前面抛出异常, fw并没有被创建,但是finally任然要执行. 这里就会有异常. fw.close(); } catch (IOException e) { sop(e.toString()); } } } public static void sop(Object obj) { System.out.println(obj); } }
/* 在windows中换行由2个符号表示,\r\n 在Linux里面 就是\n */ ------------------------ import java.io.*; public class FileWriter2 { public static void main(String args[]) throws IOException { FileWriter fw = new FileWriter("litiepeng.txt",true);//这个是如果文件存在,在这个文件后面追加. fw.write("nihao\r\n好不好哦"); fw.close(); } public static void sop(Object obj) { System.out.println(obj); } }
字符流的抽象基类: Reader,Writer */ import java.io.*; public class ioDemo { public static void main(String args[]) throws IOException { //创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件 //文件会被创建到指定目录下,如果文件存在,将被覆盖. // FileWriter fw = new FileWriter("demo.txt",true); FileWriter fw = new FileWriter("demo.txt"); //调用writer方法,将字符串写入到流中,但是还没存到文件中 fw.write("litiepeng"); //刷新流对象中的缓冲区,将流中的数据写到文件中 fw.flush(); //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据. //和flush区别,flush刷新后,流可以继续使用,close刷新后,会将流关闭. fw.close(); } public static void sop(Object obj) { System.out.println(obj); } }
PrintStream System.setIn(); System.setOut(); package pack; import java.io.IOException; import java.io.PrintStream; import java.text.SimpleDateFormat; import java.util.Date; public class Demo { public static void main(String args[]) throws IOException { try { int[] arr = new int[2]; System.out.println(arr[3]); } catch (Exception e) { try { Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String s = sdf.format(d); PrintStream ps = new PrintStream("exception.log"); ps.println(s); //先打印时间 System.setOut(ps);//这里会有异常产生 } catch (IOException ee) { throw new RuntimeException("日志文件创建失败"); } e.printStackTrace(System.out); sop("ddd"); } } public static void sop(Object obj) { System.out.println(obj); } }