FileOutputStream
1 package cn.hello; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.FilenameFilter; 7 import java.io.IOException; 8 import java.text.SimpleDateFormat; 9 import java.util.Date; 10 11 /* 12 * IO流 13 * 作用:主要是用来上传文件和下载文件 14 * 字节流 15 * 字符流:如果是文本,用字符流 16 * 17 * 字节流 18 * InputStream OutputStream 19 * 字符流 20 * Reader Writer 21 * 22 * 23 * */ 24 25 /* 26 * OutputStream 27 * 构造方法 28 * FileOutputStream(File file) 29 * FileOutputStream(String name) 30 * 31 * */ 32 public class Test01 { 33 public static void main(String[] args) throws IOException { 34 //创建字节输出流对象 35 /*File f1=new File("j:\\zf"); 36 f1.mkdir(); 37 File f2=new File(f1,"a.txt"); 38 try { 39 f2.createNewFile(); 40 } catch (IOException e) { 41 // TODO Auto-generated catch block 42 e.printStackTrace(); 43 } 44 45 try { 46 FileOutputStream fos=new FileOutputStream(f2); 47 } catch (FileNotFoundException e) { 48 // TODO Auto-generated catch block 49 e.printStackTrace(); 50 } 51 */ 52 53 54 //第二种方式 55 //1创建字节流对象 56 FileOutputStream fos=new FileOutputStream("j:\\hello.txt"); 57 //创建字节流对象做了:1调用系统功能去创建文件(但是不会创建目录) 2创建fos对象 3把fos对象指向这个文件 58 59 //2调用方法 写入数据 60 //把字符串转为字节数组:getBytes() 转为字符数组:toCharArray() 61 fos.write("hello world".getBytes()); 62 63 //3释放资源 64 fos.close(); //1让流对象变成垃圾,被垃圾回收器回收2通知系统去释放资源 65 66 } 67 }
1 package cn.hello; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.FilenameFilter; 7 import java.io.IOException; 8 import java.text.SimpleDateFormat; 9 import java.util.Date; 10 11 /*实现换行 12 * 13 * linux: \n 14 * mac: \r 15 * windows \r\n 16 * */ 17 public class Test01 { 18 public static void main(String[] args) throws IOException { 19 File f1=new File("j:\\zf\\zf"); 20 f1.mkdirs(); 21 FileOutputStream fos=new FileOutputStream("j:\\zf\\zf\\hello.txt"); 22 fos.write("hello world".getBytes()); 23 24 //换行 25 for(int x=0;x<10;x++){ 26 fos.write(("hello"+x).getBytes()); 27 fos.write("\r\n".getBytes()); 28 } 29 30 //追加写入 31 FileOutputStream fos1=new FileOutputStream("j:\\zf\\zf\\hello.txt",true); 32 fos1.write("hello world take it easy".getBytes()); 33 fos.close(); 34 35 } 36 }
1 package cn.hello; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.FilenameFilter; 8 import java.io.IOException; 9 import java.text.SimpleDateFormat; 10 import java.util.Date; 11 12 13 /* 14 * 读出数据 15 * FileInputStream 16 * 17 * 18 * 19 * 20 * */ 21 22 public class Test01 { 23 public static void main(String[] args) throws IOException { 24 FileInputStream fis=new FileInputStream("j:\\zf\\zf\\hello.txt"); 25 //第一次读取 26 /* int by=fis.read(); 27 System.out.print((char)by); 28 //第二次读取 29 by=fis.read(); 30 System.out.print((char)by); 31 //第三次读取 32 by=fis.read(); 33 System.out.print((char)by);*/ 34 /* 35 * 由上面观察可知,文件读取存在类似于指针的东西,会在上一次读取位置基础上,往后继续读取 36 * */ 37 38 /* int by1=fis.read(); 39 while(by1!=-1){ 40 System.out.print((char)by1); 41 by1=fis.read(); 42 }*/ 43 44 int by=0; 45 while((by=fis.read())!=-1){ 46 System.out.print((char)by); //文件里如果有中文,则会出现乱码,以后会用字符流处理 47 } 48 49 fis.close(); 50 } 51 }
1 package cn.hello; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.FilenameFilter; 8 import java.io.IOException; 9 import java.text.SimpleDateFormat; 10 import java.util.Date; 11 12 13 /* 14 * 复制文件 15 * 16 * */ 17 public class Test01 { 18 public static void main(String[] args) throws IOException { 19 //封装数据源 20 FileInputStream fis=new FileInputStream("j:\\zf\\zf\\hello.txt"); 21 //封装目的地 22 FileOutputStream fos=new FileOutputStream("j:\\zf\\zf\\world.txt"); 23 24 int by=0; 25 while((by=fis.read())!=-1){ //此时传输中文是没有问题的,因为中间没有转换过程 26 fos.write(by); 27 } 28 29 fis.close(); 30 fos.close(); 31 } 32 }
1 package cn.hello; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.FilenameFilter; 8 import java.io.IOException; 9 import java.text.SimpleDateFormat; 10 import java.util.Date; 11 12 /* 13 * 一次读取一个字节数组 14 * int read(byte[] b) 15 * */ 16 17 public class Test01 { 18 public static void main(String[] args) throws IOException { 19 //封装数据源 20 FileInputStream fis=new FileInputStream("j:\\zf\\zf\\101.avi"); 21 //封装目的地 22 FileOutputStream fos=new FileOutputStream("j:\\zf\\222.avi"); 23 24 byte[] bys=new byte[1024]; 25 int len=fis.read(bys); 26 27 while((len=fis.read(bys))!=-1){ 28 fos.write(bys,0,len); 29 } 30 31 fis.close(); 32 fos.close(); 33 } 34 }
1 package cn.hello; 2 3 import java.io.BufferedOutputStream; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.FilenameFilter; 9 import java.io.IOException; 10 import java.text.SimpleDateFormat; 11 import java.util.Date; 12 13 14 /* 15 * 字节缓冲流 16 * BufferedOutputStream BufferedInputStream 17 * 18 * 构造方法可以指定缓冲区的大小,但一般用不上,因为默认缓冲区大小就足够了 19 * 20 * 21 * */ 22 23 public class Test01 { 24 public static void main(String[] args) throws IOException { 25 //BufferedOutputStream(OutputStream out) ?为什么不传递一个具体的文件或者文件路径,而是传递一个OutputStream对象呢? 26 //因为字节缓冲区仅仅提供缓冲区,是为搞笑设计的。但是真正的读写操作还是靠基本的流对象实现 27 //FileOutputStream fos=new FileOutputStream("j:\\zf\\zf\\hello.txt"); 28 BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("j:\\zf\\zf\\hello.txt")); 29 30 bos.write("hello".getBytes()); 31 32 bos.close(); 33 } 34 }
1 package cn.hello; 2 3 import java.io.BufferedOutputStream; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.FilenameFilter; 9 import java.io.IOException; 10 import java.io.OutputStreamWriter; 11 import java.text.SimpleDateFormat; 12 import java.util.Arrays; 13 import java.util.Date; 14 15 /* 16 * String(byte[] bytes,String charsetName):通过制定的字符集解码字节数组 17 * 18 * byte[] getBytes(String charsetName):使用指定的字符集和把字符串编码为字节数组 19 * 20 * 编码:把看的懂得转为看不懂的 21 * OutputStreamWriter(outputStream out) 使用默认编码 22 * OutputStreamWriter(outputStream out,String charsetName) 使用指定编码 23 * 24 * */ 25 26 public class Test01 { 27 public static void main(String[] args) throws IOException { 28 /* String s="你好"; 29 byte[] bys=s.getBytes("GBK"); 30 System.out.println(Arrays.toString(bys));*/ 31 //字符流=字节流+编码表 32 33 //创建对象 34 OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("j:\\zf\\zf\\hello.txt"),"GBK"); 35 36 osw.write("中国"); 37 38 osw.close(); 39 } 40 }
1 package cn.hello; 2 3 import java.io.BufferedOutputStream; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.FilenameFilter; 9 import java.io.IOException; 10 import java.io.InputStreamReader; 11 import java.io.OutputStreamWriter; 12 import java.text.SimpleDateFormat; 13 import java.util.Arrays; 14 import java.util.Date; 15 16 /* 17 * 18 * InputStreamReader 19 * */ 20 21 public class Test01 { 22 public static void main(String[] args) throws IOException { 23 InputStreamReader isr=new InputStreamReader(new FileInputStream("j:\\zf\\zf\\hello.txt"),"UTF-8"); 24 25 int ch=0; 26 27 while((ch=isr.read())!=-1){ 28 System.out.print((char)ch); 29 } 30 } 31 }
1 package cn.hello; 2 3 import java.io.BufferedOutputStream; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.FilenameFilter; 9 import java.io.IOException; 10 import java.io.InputStreamReader; 11 import java.io.OutputStreamWriter; 12 import java.text.SimpleDateFormat; 13 import java.util.Arrays; 14 import java.util.Date; 15 16 /* 17 * OutputStreamWriter 18 * public void write(int c):写一个字符 19 * public void write(char[] cbuf):写一个字符数组 20 * public void write(char[] cbuf ,int off,int len) 21 * public void write(String str):写一个字符串 22 * public void write(String str,int off,int len) 23 * 24 * */ 25 26 public class Test01 { 27 public static void main(String[] args) throws IOException { 28 //创建对象 29 OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("j:\\zf\\zf\\hello.txt")); 30 osw.write('林'); //为什么文件还是空的呢? 因为:字符=2字节 文件中数据存储的基本单位是字节 有时候需要flush一下 31 //osw.flush(); 32 33 //public void write (char[] cbuf) 34 char[] chs={'a','b','c','d'}; 35 osw.write(chs); 36 37 osw.write("敢与士大夫日月争辉",2,3); 38 //刷新缓冲区 39 //osw.flush(); 40 41 osw.close(); //关闭之前会自动flush一下 42 } 43 }
1 package cn.hello; 2 3 import java.io.BufferedOutputStream; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.FilenameFilter; 9 import java.io.IOException; 10 import java.io.InputStreamReader; 11 import java.io.OutputStreamWriter; 12 import java.text.SimpleDateFormat; 13 import java.util.Arrays; 14 import java.util.Date; 15 16 /* 17 * InputStreamReader 18 * int read() 19 * int read(char[] chs) 20 * 21 * */ 22 23 public class Test01 { 24 public static void main(String[] args) throws IOException { 25 //创建对象 26 InputStreamReader isr=new InputStreamReader(new FileInputStream("j:\\zf\\zf\\hello.txt")); 27 //一次读取一个字符 28 /*int ch=0; 29 while((ch=isr.read())!=-1){ 30 System.out.print((char)ch); 31 }*/ 32 33 //一次读取一个字符 34 char[] chs=new char[1024]; 35 int len=0; 36 while((len=isr.read(chs))!=-1){ 37 System.out.print(new String(chs,0,len)); 38 } 39 40 41 42 isr.close(); 43 } 44 }
1 package cn.hello; 2 3 import java.io.BufferedOutputStream; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.FilenameFilter; 9 import java.io.IOException; 10 import java.io.InputStreamReader; 11 import java.io.OutputStreamWriter; 12 import java.text.SimpleDateFormat; 13 import java.util.Arrays; 14 import java.util.Date; 15 16 /* 17 * 字符流:读写文件 18 * */ 19 20 public class Test01 { 21 public static void main(String[] args) throws IOException { 22 //封装数据源 23 InputStreamReader isr=new InputStreamReader(new FileInputStream("j:\\zf\\zf\\hello.txt")); 24 //封装目的地 25 OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("j:\\zf\\zf\\hhh.txt")); 26 27 //方式1 28 /* int ch=0; 29 while((ch=isr.read())!=-1){ 30 osw.write(ch); 31 }*/ 32 33 //方式2 34 char[] chs=new char[1024]; 35 int len=0; 36 while((len=isr.read(chs))!=-1){ 37 osw.write(chs,0,len); 38 osw.flush(); 39 } 40 41 osw.close(); 42 isr.close(); 43 } 44 }
1 package cn.hello; 2 3 import java.io.BufferedOutputStream; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.FileReader; 9 import java.io.FileWriter; 10 import java.io.FilenameFilter; 11 import java.io.IOException; 12 import java.io.InputStreamReader; 13 import java.io.OutputStreamWriter; 14 import java.text.SimpleDateFormat; 15 import java.util.Arrays; 16 import java.util.Date; 17 18 /* 19 * 20 * 由于我们常见的操作都是使用本地默认编码,所以,不用指定编码,而转换流有点长,所以,java就提供了其子类供我们使用 21 * 22 * OutputStreamWriter=FileOutputStream+编码表(GBK) 23 * FileWriter=FileOutputStream+编码表(GBK) 24 * 25 * 字符流的简化写法 26 * FileReader FileWriter 27 * */ 28 29 public class Test01 { 30 public static void main(String[] args) throws IOException { 31 //封装数据源 32 FileReader fr=new FileReader("j:\\zf\\zf\\hello.txt"); 33 //封装目的地 34 FileWriter fw=new FileWriter("j:\\zf\\zf\\sss.txt"); 35 36 //一次一个字符 37 int ch=0; 38 while((ch=fr.read())!=-1){ 39 fw.write(ch); 40 } 41 42 //一次一个字符数组 43 char[] chs=new char[1024]; 44 int len=0; 45 while((len=fr.read(chs))!=-1){ 46 fw.write(chs,0,len); 47 fw.flush(); 48 } 49 50 fw.close(); 51 fr.close(); 52 53 54 } 55 }
1 package cn.hello; 2 3 import java.io.BufferedOutputStream; 4 import java.io.BufferedReader; 5 import java.io.BufferedWriter; 6 import java.io.File; 7 import java.io.FileInputStream; 8 import java.io.FileNotFoundException; 9 import java.io.FileOutputStream; 10 import java.io.FileReader; 11 import java.io.FileWriter; 12 import java.io.FilenameFilter; 13 import java.io.IOException; 14 import java.io.InputStreamReader; 15 import java.io.OutputStreamWriter; 16 import java.text.SimpleDateFormat; 17 import java.util.Arrays; 18 import java.util.Date; 19 20 /* 21 * 字符缓冲流 22 * 字符缓冲流的特殊方法 23 * BufferedWriter: 24 * public void newLine():根据系统来决定换行 25 * BufferedReader: 26 * public String readLine():一次读取一行数据 返回的只是改行的内容,不包括换行符 到达流的末尾的时候,返回的不是-1而是null 27 * 28 * */ 29 30 public class Test01 { 31 public static void main(String[] args) throws IOException { 32 //BufferedWriter(Writer out) 33 BufferedWriter bw=new BufferedWriter(new FileWriter("j:\\zf\\zf\\yyy.txt")); 34 35 bw.write("hello world take it easy "); 36 37 //字符缓冲流的特殊方法 38 bw.newLine(); 39 bw.write("hello,can we go to another place so we can go there and we will go to "); 40 bw.flush(); 41 42 bw.close(); 43 44 //------------------------------- 一次读出一行数据 45 BufferedReader br=new BufferedReader(new FileReader("j:\\zf\\zf\\yyy.txt")); 46 System.out.println(br.readLine()); 47 //--------- 48 String line=null; 49 while((line=br.readLine())!=null){ 50 System.out.println(line); 51 } 52 br.close(); 53 54 } 55 }
1 package cn.hello; 2 3 import java.io.BufferedOutputStream; 4 import java.io.BufferedReader; 5 import java.io.BufferedWriter; 6 import java.io.File; 7 import java.io.FileInputStream; 8 import java.io.FileNotFoundException; 9 import java.io.FileOutputStream; 10 import java.io.FileReader; 11 import java.io.FileWriter; 12 import java.io.FilenameFilter; 13 import java.io.IOException; 14 import java.io.InputStreamReader; 15 import java.io.OutputStreamWriter; 16 import java.text.SimpleDateFormat; 17 import java.util.ArrayList; 18 import java.util.Arrays; 19 import java.util.Date; 20 21 /* 22 * 把集合中的数据存储到文本文件中 23 * */ 24 25 public class Test01 { 26 public static void main(String[] args) throws IOException { 27 ArrayList<String> arr=new ArrayList<String>(); 28 arr.add("hello"); 29 arr.add("world"); 30 arr.add("java"); 31 32 BufferedWriter bw=new BufferedWriter(new FileWriter("j:\\zf\\zf\\hello.txt")); 33 34 for(String s:arr){ 35 bw.write(s); 36 bw.newLine(); 37 bw.flush(); 38 } 39 bw.close(); 40 } 41 }
1 package cn.hello; 2 3 import java.io.BufferedOutputStream; 4 import java.io.BufferedReader; 5 import java.io.BufferedWriter; 6 import java.io.File; 7 import java.io.FileInputStream; 8 import java.io.FileNotFoundException; 9 import java.io.FileOutputStream; 10 import java.io.FileReader; 11 import java.io.FileWriter; 12 import java.io.FilenameFilter; 13 import java.io.IOException; 14 import java.io.InputStreamReader; 15 import java.io.OutputStreamWriter; 16 import java.text.SimpleDateFormat; 17 import java.util.ArrayList; 18 import java.util.Arrays; 19 import java.util.Date; 20 21 /* 22 * 把文本文件中的数据存储到集合中 23 * */ 24 25 public class Test01 { 26 public static void main(String[] args) throws IOException { 27 //封装数据源 28 BufferedReader br=new BufferedReader(new FileReader("j:\\zf\\zf\\ct.txt")); 29 //封装目的地 30 ArrayList<String> arr=new ArrayList<String>(); 31 32 //读取数据,存储到集合中 33 String line=null; 34 while((line=br.readLine())!=null){ 35 arr.add(line); 36 } 37 br.close(); 38 //遍历集合 39 for(String s:arr){ 40 System.out.println(s); 41 } 42 43 44 } 45 }
1 package cn.hello; 2 3 import java.io.BufferedOutputStream; 4 import java.io.BufferedReader; 5 import java.io.BufferedWriter; 6 import java.io.File; 7 import java.io.FileInputStream; 8 import java.io.FileNotFoundException; 9 import java.io.FileOutputStream; 10 import java.io.FileReader; 11 import java.io.FileWriter; 12 import java.io.FilenameFilter; 13 import java.io.IOException; 14 import java.io.InputStreamReader; 15 import java.io.OutputStreamWriter; 16 import java.text.SimpleDateFormat; 17 import java.util.ArrayList; 18 import java.util.Arrays; 19 import java.util.Date; 20 import java.util.Random; 21 22 /* 23 * 一个文本文件中存储了几个名字,实现如何随机获取一个人的名字 24 * 分析: 25 * 1:把文本文件中的内容放入集合中 26 * 2:随机产生一个索引 27 * 3:根据该索引获取一个值 28 * 29 * 30 * */ 31 32 public class Test01 { 33 public static void main(String[] args) throws IOException { 34 //1把文本文件中的内容放入集合中 35 BufferedReader br=new BufferedReader(new FileReader("j:\\zf\\zf\\ct.txt")); 36 37 ArrayList<String> arr=new ArrayList<String>(); 38 String line=null; 39 while((line=br.readLine())!=null){ 40 arr.add(line); 41 } 42 br.close(); 43 44 //随机产生一个索引 45 Random r=new Random(); 46 int index=r.nextInt(arr.size()); 47 48 //根据索引获取一个值 49 String name=arr.get(index); 50 System.out.println(name); 51 } 52 }