【Java】Input,Output,Stream I/O流 02
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【Java】Input,Output,Stream I/O流 02,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5225字,纯文字阅读大概需要8分钟。
内容图文
![【Java】Input,Output,Stream I/O流 02](/upload/InfoBanner/zyjiaocheng/635/2d19af6e9a1b4ed9aebdffb0e0a46106.jpg)
Reader & Writter 只适合文本的输入输出 【.txt .java .c .cpp】
传输文件,不能使用文本IO进行读写,需要使用文件输入输出流
public class IOTest { public static void main(String[] args) throws Exception { // 文件输入输出 // 图片文件测试复制 File srcImg = new File("1774415.jpg"); // 新图片文件 File destImg = new File("new.jpg"); // 写入对象 InputStream inputStream = new FileInputStream(srcImg); // 写出对象 OutputStream outputStream = new FileOutputStream(destImg); // 缓冲字节数组 byte[] bytesBuffer = new byte[10]; // 返回个数 int len; while ( (len = inputStream.read(bytesBuffer)) != -1){ // 写入数据 outputStream.write(bytesBuffer,0,len); } inputStream.close(); outputStream.close(); } }
文件复制的方法封装
static void fileCopy(String srcPath,String destPath){ // 文件复制的方法封装 File srcFile = new File(srcPath); File destFile = new File(destPath); InputStream inputStream = null; OutputStream outputStream = null; try{ inputStream = new FileInputStream(srcFile); outputStream = new FileOutputStream(destFile); byte[] bytesBuffer = new byte[1024]; //2的十次方 int length; // 当前读取个数 while ((length = inputStream.read(bytesBuffer)) != -1){ outputStream.write(bytesBuffer,0,length); } } catch (Exception e) { e.printStackTrace(); } finally { try { outputStream.close(); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
缓冲流,提高文件读写效率
- BufferedInputStream
- BufferedOutputStream
- BufferedReader
- BufferedWritter
static void bufferFileCopy(String srcPath,String destPath){ // 文件复制的方法封装 File srcFile = new File(srcPath); File destFile = new File(destPath); InputStream inputStream = null; OutputStream outputStream = null; InputStream bufferInput = null; OutputStream bufferOutput = null; try{ inputStream = new FileInputStream(srcFile); outputStream = new FileOutputStream(destFile); // 多添加一次缓冲流对象装载 bufferInput = new BufferedInputStream(inputStream); bufferOutput = new BufferedOutputStream(outputStream); // 调用缓冲输入输出读写文件 byte[] bytesBuffer = new byte[1024]; //2的十次方 int length; // 当前读取个数 while ((length = bufferInput.read(bytesBuffer)) != -1){ bufferOutput.write(bytesBuffer,0,length);
// bufferOutput.flush(); 刷新缓冲数组,但是write已经自带此方法了,所以不用再调用了 } } catch (Exception e) { e.printStackTrace(); } finally { try {
// 先关闭缓冲输入输出对象 bufferInput.close(); bufferOutput.close(); // 在关闭文件输入输出对象 关闭外层流的同时,内存流也会被关闭,这一步可以省略 //outputStream.close(); //inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
- BufferedReader 和 BufferedWritter 也是一样套接实现的流对象上
static void bufferFileCopy(String srcPath,String destPath){ // 文件复制的方法封装 File srcFile = new File(srcPath); File destFile = new File(destPath); Reader reader = null; Writer writer = null; BufferedReader bufferReader = null; BufferedWriter bufferWriter = null; try{ reader = new FileReader(srcFile); writer = new FileWriter(destFile); // 多添加一次缓冲流对象装载 bufferReader = new BufferedReader(reader); bufferWriter = new BufferedWriter(writer); // 调用缓冲输入输出读写文件 /*byte[] bytesBuffer = new byte[1024]; //2的十次方 int length; // 当前读取个数 while ((length = bufferInput.read(bytesBuffer)) != -1){ bufferOutput.write(bytesBuffer,0,length); }*/ // 采用String读取 String data; while( (data = bufferReader.readLine()) != null){ System.out.println(data); bufferWriter.write(data + "\n");// data 不包含换行字符 或者bufferWriter.newLine(); } } catch (Exception e) { e.printStackTrace(); } finally { try { bufferReader.close(); bufferWriter.close(); } catch (IOException e) { e.printStackTrace(); } } }
转换流
- InputStreamReader 一个字节输入流 转换至 字符输入流
- OutputStreamWriter 一个字节输出流 转换至 字符输出流
解码 : 字节 字节数组 -> 字符串 字符数组
编码: 字符串 字符数组 -> 字节 字节数组
- 字符集问题 https://www.bilibili.com/video/BV12741127qm
ASCII 美国标准信息交换码,阿斯克码
GBK 中国中文编码表升级,兼容更多中文,原GB2312
Unicode 国际标准码
UTF-8 中英通用
static void readFile(String srcPath) throws Exception { File file = new File(srcPath); InputStream inputStream = new FileInputStream(file); InputStreamReader inputReader = new InputStreamReader(inputStream,"UTF-8"); // new InputStreamReader(inputStream, StandardCharsets.UTF_8); // new InputStreamReader(inputStream, "UTF-8"); 一般不写字符集参数,默认使用系统字符集[文件创建时,设置的字符集] char[] charsBuffer = new char[12]; int len; while ((len = inputReader.read(charsBuffer)) != -1 ){ String str = new String(charsBuffer,0,len); System.out.println(str); } inputReader.close(); }
文件字符转换的输入输出问题
static void transFileCopy(String srcPath,String destPath) throws Exception { // 创建文件、创建流对象 File srcFile = new File(srcPath); File destFile = new File(destPath); InputStream inputStream = new FileInputStream(srcFile); OutputStream outputStream = new FileOutputStream(destFile); InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"UTF-8"); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream,"GBK"); // 读写过程 char[] charsBuffer = new char[10]; int len; while ((len = inputStreamReader.read(charsBuffer)) != -1){ outputStreamWriter.write(charsBuffer,0,len); } // 释放资源 inputStreamReader.close(); outputStreamWriter.close(); }
内容总结
以上是互联网集市为您收集整理的【Java】Input,Output,Stream I/O流 02全部内容,希望文章能够帮你解决【Java】Input,Output,Stream I/O流 02所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。