转换流

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

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

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

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

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

OutputStreamWriter


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

OutputStreamWriter(或FileWriter)写数据

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

代码练习

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.IOException; public class OutputStreamWriteDemo{
public static void main(String[] args)throws IOException{
//创建对象
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("/home/hadoop/a.txt")); /*
//写数据
//public void write(int c):写一个字符
osw.write("\na\n");
osw.write(87); */ //public void write(char[] cbuf):写一个字符数组
char[] chs = {'a','b','c','d'};//不能使用双引号?
// osw.write(chs); //public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
// osw.write(chs,1,3); //public void write(String str):
// osw.write("自学java"); //public void write(String str,int off, int len):写一个字符串的一部分
osw.write("邬家栋自学java",3,6); osw.flush();
osw.close(); }
}

InputStreamReader

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

InputStreamReader(或FileReader)读取数据

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

代码练习

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.IOException; public class InputStreamReadDemo{
public static void main(String[] args)throws IOException{
//创建对象
InputStreamReader isr = new InputStreamReader(new FileInputStream("/home/hadoop/javatest/IO/OutputStreamWriteDemo.java")); /*
int ch = 0;
while((ch = isr.read())!= -1){
System.out.print((char)ch);
} */ //一次读取一个字符数组
char[] chs = new char[1024];
int len = 0;
while((len = isr.read(chs)) != -1){
System.out.print(new String(chs,0,len));
} isr.close(); }
}

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

import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class CopyFileDemo{
public static void main(String[] args)throws IOException{
//封装数据源
InputStreamReader isr = new InputStreamReader(new FileInputStream("/home/hadoop/a.txt"));
//封装目的地
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("/home/hadoop/b.txt")); /*
//方式一
int ch = 0;
while((ch = isr.read()) != -1){
osw.write(ch);
}
*/ //方式二
char[] chs = new char[1024];
int len = 0;
while((len = isr.read(chs)) != -1){
osw.write(chs,0,len);
osw.flush(); } isr.close();
osw.close(); }
}

字符缓冲流BufferedWriter写数据

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter; public class BufferedWriterDemo{
public static void main(String[] args)throws IOException{ //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("bw.txt")));
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt")); bw.write("hello\n");
bw.write("wujiadong\n"); bw.close(); }
}

字符缓冲流BufferedReader读数据

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException; public class BufferedReaderDemo{
public static void main(String[] args)throws IOException{
//创建字符缓冲输入流对象
BufferedReader br = new BufferedReader(new FileReader("bw.txt")); /*
//方式1
int ch = 0;
while((ch = br.read()) != -1){
System.out.print((char) ch);
}
*/ //方式2
char[] chs = new char[1024];
int len = 0;
while((len = br.read(chs)) != -1){
System.out.print(new String(chs,0,len));
} br.close();
}
}

字符缓存流复制文件

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class CopyFileDemo{
public static void main(String[] args)throws IOException{
//
BufferedReader br = new BufferedReader(new FileReader("a.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt")); //方式1
//方式2
char[] chs = new char[1024];
int len = 0;
while((len = br.read(chs)) != -1){
bw.write(chs,0,len); } br.close();
bw.close();
}
}

特殊功能(一次读一行)

  • readLine(): 无换行符
  • newline(): 换行
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader; public class BufferedDemo{
public static void main(String[] args)throws IOException{
// write();
read();
} public static void read()throws IOException{
BufferedReader br = new BufferedReader(new FileReader("bw2.txt")); String line = null;
while((line = br.readLine()) != null){
System.out.println(line);
} br.close(); } public static void write() throws IOException{
BufferedWriter bw = new BufferedWriter (new FileWriter("bw2.txt")); for(int i=0;i<10;i++){
bw.write("wujiadong");
bw.newLine(); //换行
bw.flush();
} bw.close();
} }

复制文件

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.FileReader;
import java.io.FileWriter; public class CopyFileDemo1{
public static void main(String[] args)throws IOException{
//封装数据源
BufferedReader br = new BufferedReader(new FileReader("CopyFileDemo.java")); //封装目的地
BufferedWriter bw = new BufferedWriter(new FileWriter("bw3.txt")); String line = null;
while((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
bw.flush();
} br.close();
bw.close();
}
}

练习1:复制文本文件

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; import java.io.BufferedReader;
import java.io.BufferedWriter; public class CopyFileDemo{
public static void main(String[] args)throws IOException{
String srcString = "bw3.txt";
String desString = "wu.txt"; // method1(srcString,desString);
// method2(srcString,desString);
// method3(srcString,desString);
// method4(srcString,desString);
method5(srcString,desString); } //字符缓存流一次读写一个字符串
private static void method5(String srcString,String desString)throws IOException{
BufferedReader br = new BufferedReader(new FileReader(srcString));
BufferedWriter bw = new BufferedWriter(new FileWriter(desString)); String line = null;
while((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
bw.flush();
} br.close();
bw.close();
} //字符缓存流一次读写一个字符数组
private static void method4(String srcString,String desString)throws IOException{
BufferedReader br = new BufferedReader(new FileReader(srcString));
BufferedWriter bw = new BufferedWriter(new FileWriter(desString)); char[] ch = new char[1024];
int len = 0;
while((len = br.read(ch)) != -1){
bw.write(ch);
} br.close();
bw.close();
} //字符缓冲流一次读写一个字符
private static void method3(String srcString,String desString)throws IOException{
BufferedReader fr = new BufferedReader(new FileReader(srcString));
BufferedWriter fw = new BufferedWriter(new FileWriter(desString)); int ch = 0;
while((ch = fr.read()) != -1){
fw.write(ch);
} fr.close();
fw.close(); } //基本字符流一次读取一个字符数组
private static void method2(String srcString,String desString)throws IOException{
FileReader fr = new FileReader(srcString);
FileWriter fw = new FileWriter(desString); char[] ch = new char[1024];
int len = 0;
while((len = fr.read(ch)) != -1){
fw.write(ch, 0 ,len);
} fr.close();
fw.close();
} //基本字符流一次读写一个字符
private static void method1(String srcString,String desString)throws IOException{
FileReader fr = new FileReader(srcString);
FileWriter fw = new FileWriter(desString); int ch = 0;
while((ch = fr.read()) != -1){
fw.write(ch);
} fr.close();
fw.close();
}
}

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

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream; public class CopyImageDemo{
public static void main(String[] args)throws IOException{
//使用字符串作为路径
// String srcFile = "1.jpg";
// String desFile = "/home/hadoop/javatest/1.jpg"; //使用File对象作为参数
File srcFile = new File("/home/hadoop/1.jpg");
File desFile = new File("/home/hadoop/javatest/1.jpg"); // method1(srcFile,desFile);
// method2(srcFile,desFile);
// method3(srcFile,desFile);
method4(srcFile,desFile);
} //基本字节流一次读取一个字节
public static void method1(File srcFile,File desFile)throws IOException{
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(desFile); int by = 0;
while((by = fis.read()) != -1){
fos.write(by);
} fis.close();
fos.close();
} //基本字节流一次读写一个字节数组
public static void method2(File srcFile,File desFile)throws IOException{
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(desFile); byte[] by = new byte[1024];
int len = 0;
while((len = fis.read(by)) != -1){
fos.write(len);
fos.flush();
} fis.close();
fos.close(); } public static void method3(File srcFile,File desFile)throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desFile)); int by = 0;
while((by = bis.read()) != -1){
bos.write(by);
} bis.close();
bos.close();
} //字节缓冲流一次读取一个字节数组
public static void method4(File srcFile,File desFile)throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desFile)); byte[] by = new byte[1024];
int len = 0;
while((len = bis.read()) != -1){
bos.write(by);
bos.flush();
} bis.close();
bos.close(); } }

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

/*
* 需求:将ArrayList集合中的字符串数据存储到文本文件
*
*/
import java.util.ArrayList;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.FileWriter; public class ArrayListToFileDemo{
public static void main(String[] args)throws IOException{
//创建集合对象
ArrayList<String> array = new ArrayList<String>(); array.add("java");
array.add("python");
array.add("scala"); //封装目的地
BufferedWriter bw = new BufferedWriter(new FileWriter("/home/hadoop/wu.txt")); //遍历集合
for(String s:array){
bw.write(s);
bw.newLine();
} bw.close();
}
}

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

/*
* 需求:从文本文件中读取数据(一行为一个字符串数据)到集合中,并遍历集合
*
*
*/
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException; public class FileToArrayListDemo{
public static void main(String[] args)throws IOException{
//封装数据源
BufferedReader br = new BufferedReader(new FileReader("/home/hadoop/wu.txt")); //封装目的地
ArrayList<String> array = new ArrayList<String>(); //读取数据存储到集合中
String line = null;
while((line = br.readLine()) != null){
array.add(line);
} br.close(); //遍历集合
for(String s:array){
System.out.println(s);
}
}
}

练习5:

/*
* 需求:有一个文本文件存储了几个名称,写一个程序实现随机获取一个人的名字
*
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random; public class GetName{
public static void main(String[] args)throws IOException{
//把文本文件的数据存储到集合中
BufferedReader br = new BufferedReader(new FileReader("/home/hadoop/wu.txt"));
ArrayList<String> array = new ArrayList<String>(); String line = null;
while((line = br.readLine()) != null){
array.add(line);
} br.close(); //产生一个随机索引
Random r = new Random();
int index = r.nextInt(array.size()); //根据该索引获取一个值
String name = array.get(index);
System.out.println("幸运者是:"+name); }
}

练习6:复制单级文件夹


import java.io.File; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream; public class CopyFolderDemo{
public static void main(String[] args)throws IOException{
//封装目录
File srcFolder = new File("/home/hadoop/javatest/IO");
File desFolder = new File("/home/hadoop/wu_test"); //如果目的地文件夹不存在就创建
if(!desFolder.exists()){
desFolder.mkdir();
} //获取该目录下的所有文本的File数组
File[] fileArray = srcFolder.listFiles(); //遍历该File数组,得到么一个File对象
for(File file:fileArray){
//System.out.println(file);
//数据源:/home/hadoop/javatest
//目的地:/home/hadoop/wu_test String name = file.getName();
File newFile = new File(desFolder,name); copyFile(file,newFile);
}
} private static void copyFile(File file,File newFile)throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile)); byte[] by = new byte[1024];
int len = 0;
while((len = bis.read(by)) != -1){
bos.write(by,0,len);
} bos.close();
bis.close(); }
}

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. xshell ftp报错:找不到匹配的outgoing encryption算法

    场景:由于登陆跳板机都是从采用密钥的方式进行登陆的,然后在传输文件的时候报错 报错信息: 解决方案: 点击属性--->选择aes256-ctr加密方式默认这里是没有选择的 再次连接就成功连接上去 ...

  2. adb连接夜神模拟器

    1.打开夜神模拟器,打开设置,调成手机模式,初次进入的话,进入设置,点击版本号5次,可以激活使用开发者模式,进入后打开USB调试功能 2.打开文件资源管理器,进入夜神模拟器的安装位置,在地址栏输入cm ...

  3. Python成长之路(常用模块学习)

    Python 拥有很多很强大的模块 主要写一下常用的几个吧 大概就是这些内容了 模块介绍 time &datetime模块 random os sys shutil json & pi ...

  4. CodeIgniter框架——源码分析之入口文件index.php

    CodeIgniter框架的入口文件主要是配置开发环境,定义目录常量,加载CI的核心类core/CodeIgniter.php.   在index.php中,CI首先做的事情就是设置PHP的错误报告, ...

  5. 求割点模板(可求出割点数目及每个割点分割几个区域)POJ1966(Cable TV Network)

    题目链接:传送门 题目大意:给你一副无向图,求解图的顶点连通度 题目思路:模板(图论算法理论,实现及应用 P396) Menger定理:无向图G的顶点连通度k(G)和顶点间最大独立轨数目之间存在如下关 ...

  6. jQuery 文档操作方法(append)

    这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 一.append() 方法 append() 方法在被选元素的结尾(仍然在内部)插入指定内容. 例子: <html& ...

  7. js引入方式的弹框方法2

    html代码: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv=& ...

  8. HTML页面布局

    接下来的下面代码,只是给了一个大的前端编写布局,如果你已经是牛人了,就当没看到,如果是一些初学者,不妨拿去用用,里面也写了一些常用的css样式,现在虽然有很多牛逼的前段框架,用起来也非常得心应手,但是 ...

  9. 2014-08-28——Android和IOS的简单嗅探,以及横竖屏的捕获思路

    一般通过navigator.userAgent来嗅探Android系统和IOS系统: if(/android/i.test(navigator.userAgent)){ //android } if( ...

  10. standard pbr(三)-BRDF

    // Default BRDF to use: #if !defined (UNITY_BRDF_PBS) // allow to explicitly override BRDF in custom ...