转换流

由于字节流操作中文不是特别方便,所以java中提供了转换流

编码表:由现实世界的字符和对应的数值组成的一张表

编码:把看得懂的变成看不懂的(String-------byte[])

解码:把看不懂的变成看得懂的(byte[]-------String)

  • String-----bytes[]
  1. import java.util.Arrays;
  2. import java.io.UnsupportedEncodingException;
  3. public class StringDemo{
  4. public static void main(String[] args)throws UnsupportedEncodingException{
  5. String s = "你好";
  6. //String-----bytes[]
  7. /*
  8. byte[] bys = s.getBytes();//将字符串转换成字节数组
  9. System.out.println(Arrays.toString(bys));//输出结果:[-28, -67, -96, -27, -91, -67]
  10. */
  11. /*
  12. byte[] bys = s.getBytes("GBK");//指定编码方式
  13. System.out.println(Arrays.toString(bys));//输出结果:[-60, -29, -70, -61]
  14. */
  15. byte[] bys = s.getBytes("utf-8");
  16. System.out.println(Arrays.toString(bys));//输出结果:[-28, -67, -96, -27, -91, -67]
  17. }
  18. }
  • bytes[]-----String
  1. import java.io.UnsupportedEncodingException;
  2. public class StringDemo{
  3. public static void main(String[] args)throws UnsupportedEncodingException{
  4. String s = "你好";
  5. // byte[] bys = s.getBytes();//默认是utf-8编码
  6. byte[] bys = s.getBytes("utf-8");
  7. //byte[] ---Sttring
  8. // String ss = new String(bys);//utf-8编码的,utf-8解码的
  9. // System.out.println(ss);//转换成字符串;输出结果是你好
  10. String ss = new String(bys,"GBK");//utf-8编的,GBK解码的
  11. System.out.println(ss);//输出结果是:浣犲ソ
  12. }
  13. }

OutputStreamWriter


  1. OutputStreamWriter(OutputStream out) :使用默认编码把字节流的数据转换为字符流
  2. OutputStreamWriter(OutputStream out, String charseName):根据指定编码把字节流数据转换成字符流

OutputStreamWriter(或FileWriter)写数据

  1. public void write(int c):写一个字符
  2. public void write(char[] cbuf):写一个字符数组
  3. public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
  4. public void write(String str):写一个字符串
  5. public void write(String str,int off,int len):写一个字符串的一部分

代码练习

  1. import java.io.FileOutputStream;
  2. import java.io.OutputStreamWriter;
  3. import java.io.IOException;
  4. public class OutputStreamWriteDemo{
  5. public static void main(String[] args)throws IOException{
  6. //创建对象
  7. OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("/home/hadoop/a.txt"));
  8. /*
  9. //写数据
  10. //public void write(int c):写一个字符
  11. osw.write("\na\n");
  12. osw.write(87);
  13. */
  14. //public void write(char[] cbuf):写一个字符数组
  15. char[] chs = {'a','b','c','d'};//不能使用双引号?
  16. // osw.write(chs);
  17. //public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
  18. // osw.write(chs,1,3);
  19. //public void write(String str):
  20. // osw.write("自学java");
  21. //public void write(String str,int off, int len):写一个字符串的一部分
  22. osw.write("邬家栋自学java",3,6);
  23. osw.flush();
  24. osw.close();
  25. }
  26. }

InputStreamReader

  1. InputStreamReader(InputStream in) :用默认的编码读取数据
  2. InputStreamReader(InputStream in, String charsetName) :用指定的编码读取数据

InputStreamReader(或FileReader)读取数据

  1. int read():一次读取一个字符
  2. int read(char[] chs):一次读取一个字符数组

代码练习

  1. import java.io.FileInputStream;
  2. import java.io.InputStreamReader;
  3. import java.io.IOException;
  4. public class InputStreamReadDemo{
  5. public static void main(String[] args)throws IOException{
  6. //创建对象
  7. InputStreamReader isr = new InputStreamReader(new FileInputStream("/home/hadoop/javatest/IO/OutputStreamWriteDemo.java"));
  8. /*
  9. int ch = 0;
  10. while((ch = isr.read())!= -1){
  11. System.out.print((char)ch);
  12. }
  13. */
  14. //一次读取一个字符数组
  15. char[] chs = new char[1024];
  16. int len = 0;
  17. while((len = isr.read(chs)) != -1){
  18. System.out.print(new String(chs,0,len));
  19. }
  20. isr.close();
  21. }
  22. }

字符流读写数据(复制文本文件)

  1. import java.io.InputStreamReader;
  2. import java.io.OutputStreamWriter;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. public class CopyFileDemo{
  7. public static void main(String[] args)throws IOException{
  8. //封装数据源
  9. InputStreamReader isr = new InputStreamReader(new FileInputStream("/home/hadoop/a.txt"));
  10. //封装目的地
  11. OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("/home/hadoop/b.txt"));
  12. /*
  13. //方式一
  14. int ch = 0;
  15. while((ch = isr.read()) != -1){
  16. osw.write(ch);
  17. }
  18. */
  19. //方式二
  20. char[] chs = new char[1024];
  21. int len = 0;
  22. while((len = isr.read(chs)) != -1){
  23. osw.write(chs,0,len);
  24. osw.flush();
  25. }
  26. isr.close();
  27. osw.close();
  28. }
  29. }

字符缓冲流BufferedWriter写数据

  1. import java.io.BufferedWriter;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. import java.io.FileOutputStream;
  5. import java.io.OutputStreamWriter;
  6. public class BufferedWriterDemo{
  7. public static void main(String[] args)throws IOException{
  8. //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("bw.txt")));
  9. BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
  10. bw.write("hello\n");
  11. bw.write("wujiadong\n");
  12. bw.close();
  13. }
  14. }

字符缓冲流BufferedReader读数据

  1. import java.io.BufferedReader;
  2. import java.io.FileReader;
  3. import java.io.IOException;
  4. public class BufferedReaderDemo{
  5. public static void main(String[] args)throws IOException{
  6. //创建字符缓冲输入流对象
  7. BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
  8. /*
  9. //方式1
  10. int ch = 0;
  11. while((ch = br.read()) != -1){
  12. System.out.print((char) ch);
  13. }
  14. */
  15. //方式2
  16. char[] chs = new char[1024];
  17. int len = 0;
  18. while((len = br.read(chs)) != -1){
  19. System.out.print(new String(chs,0,len));
  20. }
  21. br.close();
  22. }
  23. }

字符缓存流复制文件

  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.FileReader;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. public class CopyFileDemo{
  7. public static void main(String[] args)throws IOException{
  8. //
  9. BufferedReader br = new BufferedReader(new FileReader("a.txt"));
  10. BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
  11. //方式1
  12. //方式2
  13. char[] chs = new char[1024];
  14. int len = 0;
  15. while((len = br.read(chs)) != -1){
  16. bw.write(chs,0,len);
  17. }
  18. br.close();
  19. bw.close();
  20. }
  21. }

特殊功能(一次读一行)

  • readLine(): 无换行符
  • newline(): 换行
  1. import java.io.BufferedWriter;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. import java.io.BufferedReader;
  5. import java.io.FileReader;
  6. public class BufferedDemo{
  7. public static void main(String[] args)throws IOException{
  8. // write();
  9. read();
  10. }
  11. public static void read()throws IOException{
  12. BufferedReader br = new BufferedReader(new FileReader("bw2.txt"));
  13. String line = null;
  14. while((line = br.readLine()) != null){
  15. System.out.println(line);
  16. }
  17. br.close();
  18. }
  19. public static void write() throws IOException{
  20. BufferedWriter bw = new BufferedWriter (new FileWriter("bw2.txt"));
  21. for(int i=0;i<10;i++){
  22. bw.write("wujiadong");
  23. bw.newLine(); //换行
  24. bw.flush();
  25. }
  26. bw.close();
  27. }
  28. }

复制文件

  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.IOException;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. public class CopyFileDemo1{
  7. public static void main(String[] args)throws IOException{
  8. //封装数据源
  9. BufferedReader br = new BufferedReader(new FileReader("CopyFileDemo.java"));
  10. //封装目的地
  11. BufferedWriter bw = new BufferedWriter(new FileWriter("bw3.txt"));
  12. String line = null;
  13. while((line = br.readLine()) != null){
  14. bw.write(line);
  15. bw.newLine();
  16. bw.flush();
  17. }
  18. br.close();
  19. bw.close();
  20. }
  21. }

练习1:复制文本文件

  1. import java.io.FileReader;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. import java.io.BufferedReader;
  5. import java.io.BufferedWriter;
  6. public class CopyFileDemo{
  7. public static void main(String[] args)throws IOException{
  8. String srcString = "bw3.txt";
  9. String desString = "wu.txt";
  10. // method1(srcString,desString);
  11. // method2(srcString,desString);
  12. // method3(srcString,desString);
  13. // method4(srcString,desString);
  14. method5(srcString,desString);
  15. }
  16. //字符缓存流一次读写一个字符串
  17. private static void method5(String srcString,String desString)throws IOException{
  18. BufferedReader br = new BufferedReader(new FileReader(srcString));
  19. BufferedWriter bw = new BufferedWriter(new FileWriter(desString));
  20. String line = null;
  21. while((line = br.readLine()) != null){
  22. bw.write(line);
  23. bw.newLine();
  24. bw.flush();
  25. }
  26. br.close();
  27. bw.close();
  28. }
  29. //字符缓存流一次读写一个字符数组
  30. private static void method4(String srcString,String desString)throws IOException{
  31. BufferedReader br = new BufferedReader(new FileReader(srcString));
  32. BufferedWriter bw = new BufferedWriter(new FileWriter(desString));
  33. char[] ch = new char[1024];
  34. int len = 0;
  35. while((len = br.read(ch)) != -1){
  36. bw.write(ch);
  37. }
  38. br.close();
  39. bw.close();
  40. }
  41. //字符缓冲流一次读写一个字符
  42. private static void method3(String srcString,String desString)throws IOException{
  43. BufferedReader fr = new BufferedReader(new FileReader(srcString));
  44. BufferedWriter fw = new BufferedWriter(new FileWriter(desString));
  45. int ch = 0;
  46. while((ch = fr.read()) != -1){
  47. fw.write(ch);
  48. }
  49. fr.close();
  50. fw.close();
  51. }
  52. //基本字符流一次读取一个字符数组
  53. private static void method2(String srcString,String desString)throws IOException{
  54. FileReader fr = new FileReader(srcString);
  55. FileWriter fw = new FileWriter(desString);
  56. char[] ch = new char[1024];
  57. int len = 0;
  58. while((len = fr.read(ch)) != -1){
  59. fw.write(ch, 0 ,len);
  60. }
  61. fr.close();
  62. fw.close();
  63. }
  64. //基本字符流一次读写一个字符
  65. private static void method1(String srcString,String desString)throws IOException{
  66. FileReader fr = new FileReader(srcString);
  67. FileWriter fw = new FileWriter(desString);
  68. int ch = 0;
  69. while((ch = fr.read()) != -1){
  70. fw.write(ch);
  71. }
  72. fr.close();
  73. fw.close();
  74. }
  75. }

练习2:复制非文本文件的4种方法

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.BufferedInputStream;
  6. import java.io.BufferedOutputStream;
  7. public class CopyImageDemo{
  8. public static void main(String[] args)throws IOException{
  9. //使用字符串作为路径
  10. // String srcFile = "1.jpg";
  11. // String desFile = "/home/hadoop/javatest/1.jpg";
  12. //使用File对象作为参数
  13. File srcFile = new File("/home/hadoop/1.jpg");
  14. File desFile = new File("/home/hadoop/javatest/1.jpg");
  15. // method1(srcFile,desFile);
  16. // method2(srcFile,desFile);
  17. // method3(srcFile,desFile);
  18. method4(srcFile,desFile);
  19. }
  20. //基本字节流一次读取一个字节
  21. public static void method1(File srcFile,File desFile)throws IOException{
  22. FileInputStream fis = new FileInputStream(srcFile);
  23. FileOutputStream fos = new FileOutputStream(desFile);
  24. int by = 0;
  25. while((by = fis.read()) != -1){
  26. fos.write(by);
  27. }
  28. fis.close();
  29. fos.close();
  30. }
  31. //基本字节流一次读写一个字节数组
  32. public static void method2(File srcFile,File desFile)throws IOException{
  33. FileInputStream fis = new FileInputStream(srcFile);
  34. FileOutputStream fos = new FileOutputStream(desFile);
  35. byte[] by = new byte[1024];
  36. int len = 0;
  37. while((len = fis.read(by)) != -1){
  38. fos.write(len);
  39. fos.flush();
  40. }
  41. fis.close();
  42. fos.close();
  43. }
  44. public static void method3(File srcFile,File desFile)throws IOException{
  45. BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
  46. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desFile));
  47. int by = 0;
  48. while((by = bis.read()) != -1){
  49. bos.write(by);
  50. }
  51. bis.close();
  52. bos.close();
  53. }
  54. //字节缓冲流一次读取一个字节数组
  55. public static void method4(File srcFile,File desFile)throws IOException{
  56. BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
  57. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desFile));
  58. byte[] by = new byte[1024];
  59. int len = 0;
  60. while((len = bis.read()) != -1){
  61. bos.write(by);
  62. bos.flush();
  63. }
  64. bis.close();
  65. bos.close();
  66. }
  67. }

练习3:将集合中的数据存储到文本文件

  1. /*
  2. * 需求:将ArrayList集合中的字符串数据存储到文本文件
  3. *
  4. */
  5. import java.util.ArrayList;
  6. import java.io.BufferedWriter;
  7. import java.io.IOException;
  8. import java.io.FileWriter;
  9. public class ArrayListToFileDemo{
  10. public static void main(String[] args)throws IOException{
  11. //创建集合对象
  12. ArrayList<String> array = new ArrayList<String>();
  13. array.add("java");
  14. array.add("python");
  15. array.add("scala");
  16. //封装目的地
  17. BufferedWriter bw = new BufferedWriter(new FileWriter("/home/hadoop/wu.txt"));
  18. //遍历集合
  19. for(String s:array){
  20. bw.write(s);
  21. bw.newLine();
  22. }
  23. bw.close();
  24. }
  25. }

练习4:把文本文件的数据存储到集合

  1. /*
  2. * 需求:从文本文件中读取数据(一行为一个字符串数据)到集合中,并遍历集合
  3. *
  4. *
  5. */
  6. import java.util.ArrayList;
  7. import java.io.BufferedReader;
  8. import java.io.FileReader;
  9. import java.io.IOException;
  10. public class FileToArrayListDemo{
  11. public static void main(String[] args)throws IOException{
  12. //封装数据源
  13. BufferedReader br = new BufferedReader(new FileReader("/home/hadoop/wu.txt"));
  14. //封装目的地
  15. ArrayList<String> array = new ArrayList<String>();
  16. //读取数据存储到集合中
  17. String line = null;
  18. while((line = br.readLine()) != null){
  19. array.add(line);
  20. }
  21. br.close();
  22. //遍历集合
  23. for(String s:array){
  24. System.out.println(s);
  25. }
  26. }
  27. }

练习5:

  1. /*
  2. * 需求:有一个文本文件存储了几个名称,写一个程序实现随机获取一个人的名字
  3. *
  4. */
  5. import java.io.BufferedReader;
  6. import java.io.FileReader;
  7. import java.io.IOException;
  8. import java.util.ArrayList;
  9. import java.util.Random;
  10. public class GetName{
  11. public static void main(String[] args)throws IOException{
  12. //把文本文件的数据存储到集合中
  13. BufferedReader br = new BufferedReader(new FileReader("/home/hadoop/wu.txt"));
  14. ArrayList<String> array = new ArrayList<String>();
  15. String line = null;
  16. while((line = br.readLine()) != null){
  17. array.add(line);
  18. }
  19. br.close();
  20. //产生一个随机索引
  21. Random r = new Random();
  22. int index = r.nextInt(array.size());
  23. //根据该索引获取一个值
  24. String name = array.get(index);
  25. System.out.println("幸运者是:"+name);
  26. }
  27. }

练习6:复制单级文件夹


  1. import java.io.File;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.IOException;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. public class CopyFolderDemo{
  8. public static void main(String[] args)throws IOException{
  9. //封装目录
  10. File srcFolder = new File("/home/hadoop/javatest/IO");
  11. File desFolder = new File("/home/hadoop/wu_test");
  12. //如果目的地文件夹不存在就创建
  13. if(!desFolder.exists()){
  14. desFolder.mkdir();
  15. }
  16. //获取该目录下的所有文本的File数组
  17. File[] fileArray = srcFolder.listFiles();
  18. //遍历该File数组,得到么一个File对象
  19. for(File file:fileArray){
  20. //System.out.println(file);
  21. //数据源:/home/hadoop/javatest
  22. //目的地:/home/hadoop/wu_test
  23. String name = file.getName();
  24. File newFile = new File(desFolder,name);
  25. copyFile(file,newFile);
  26. }
  27. }
  28. private static void copyFile(File file,File newFile)throws IOException{
  29. BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
  30. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
  31. byte[] by = new byte[1024];
  32. int len = 0;
  33. while((len = bis.read(by)) != -1){
  34. bos.write(by,0,len);
  35. }
  36. bos.close();
  37. bis.close();
  38. }
  39. }

java基础11(IO流)-字符流的更多相关文章

  1. 【Java基础】【21IO(字符流)&字符流其他内容&递归】

    21.01_IO流(字符流FileReader) 1.字符流是什么 字符流是可以直接读写字符的IO流 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写 ...

  2. java基础(23):字节流、字符流

    1. 字节流 在前面的学习过程中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现在我们就要开始给文件中写数据,或者读取文件中的数据. 1.1 字节输出流OutputStream Out ...

  3. JAVA基础之字节流与字符流

    个人理解: IO流就是将数据进行操作的方式,因为编码的不同,所以对文件的操作就产生两种.最好用字节流,为了方便看汉字等,(已经确定文字的话)可以使用字符流.每个流派也就分为输入和输出,这样就可以产生复 ...

  4. Java基础:IO流之字节流和字符流

    1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...

  5. java基础之IO流(二)之字符流

    java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...

  6. java基础之IO流(一)字节流

    java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...

  7. Java基础之IO流整理

    Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...

  8. Java IO: 其他字符流(下)

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...

  9. Java IO流字符流简介及基本使用

    Java IO流字符流简介及常用字符流的基本使用 字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能.在编码中我们常用的输出字符流有File ...

  10. java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr

    BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWri ...

随机推荐

  1. jpofiler监控JVM

    1.官方下载地址,选择自己想要的版本 https://www.ej-technologies.com/download/jprofiler/version_92 2.分为linux服务端.window ...

  2. Disable Client Certificate Revocation (CRL) Check on IIS

    Disable Client Certificate Revocation (CRL) Check on IIS: REGISTRY  : HKLM\SYSTEM\CurrentControlSet\ ...

  3. SharePoint解决方案及开发系列(2)-ECM

    很多次跟客户做咨询及沟通的时候,客户都问SharePoint能做什么?是不是就是做文档管理?为什么要花那么多的钱没SharePoint?高大上? 我上家公司面试的时候,我的那个BOSS面试官有一个问题 ...

  4. 《从零开始学Swift》学习笔记(Day 50)——扩展计算属性、方法

    原创文章,欢迎转载.转载请注明:关东升的博客 可以在原始类型上扩展计算属性,包括实例计算属性和静态计算属性.添加计算属性的定义,与普通的计算属性的定义是一样的. 实例计算属性示例:在网络编程时,为了减 ...

  5. 【穿插】Python基础之文件、文件夹的创建,对上一期代码进行优化

    在上一期妹子图的爬虫教程中,我们将图片都保存在了代码当前目录下,这样并不便于浏览,我们应该将同一个模特的图片都放在一个文件夹中. 今天我们就简单讲一下Python下如何创建文件.文件夹,今后就可以用上 ...

  6. Java+selenium自动化测试基础

    Java+selenium maven配置 maven的配置,但还需要建立maven的本地库,修改apach-maven的setting.xml http://www.cnblogs.com/haoa ...

  7. EasyNVR智能云终端硬件与EasyNVR解决方案软件综合对比

    背景分析 互联网视频直播越来越成为当前视频直播的大势,对于传统的安防监控,一般都是局限于内网,无法成批量上云台.传统的海康和大华的平台虽然可以通过自身私有协议上云平台 集总管控,但是往往只是支持自身的 ...

  8. java 多种判断key是否在map中存在的方法

    java 中有时候会遇到判断传过来的map里是否包含了指定的key,我目前只发现两种办法,如果有其他方法欢迎补充 我添加上去: HashMap map = new HashMap(); map.put ...

  9. Directory和HashTable的区别

    1:单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.2:多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读 ...

  10. <2013 12 17> 专业技能

    Specialties: • Mechanical design modeling using Pro/ENGINEER and SolidWorks.• Robot control, path pl ...