java--字符流(三)
【摘要】
java--字符流(三)
一、字符流
Java中的字符是Unicode编码,是双字节的,1个字符 等于 2个字节;使用字节来处理字符文本就不太方便了,此时可以考虑使用字符流;字符流主要是操作char的类型数据:
字符输出流:Writer
字符输入流:Reader
二、字符流-Reader
 ...
java--字符流(三)
一、字符流
- Java中的字符是Unicode编码,是双字节的,1个字符 等于 2个字节;
- 使用字节来处理字符文本就不太方便了,此时可以考虑使用字符流;
- 字符流主要是操作char的类型数据:
字符输出流:Writer
字符输入流:Reader
二、字符流-Reader
- abstract void close() throws IOException:关闭流
- int read() throws IOException:从输入流中读取单个字符。
- int read(char[] cbuf) throws IOException:从输入流中读取最多c.length个字节的数据,并将其存储在字符数组c中,返回实际读取的字节。
- 直到read(char[] c)方法返回-1表示输入流的结束。
- char[] cBuff = new char[1024];//动态声明数组,长度
- read(cBuff ) !=-1 read(cBuff ) >0
- 以其子类FileReader来实例化Reader对象
FileReader(File/String file) throws FileNotFoundException 创建一个向指定对象的文件输入流
三、字符流-Writer
- abstract void flush() throws IOException:清空缓存
- abstract void close() throws IOException:关闭流
- void write(char[] cbuf):将字符数组中的数据输入到输出流中。
- void write(char[] cbuf,int off,int len):将字符数组从off位置开始,长度为len的字节输入到输出流中。
- void write(String str):将str字符串所有字符输出到指定的输出流中。
- void write(String str,int off, int len):将str字符串里从off位置开始,长度为len的字符输出到指定的输出流中。
- 以其子类FileWriter来实例化Writer对象
FileWriter(File/String file, boolean append) throws FileNotFoundException 创建一个向指定对象的文件输出流,append表示是否追加。默认是false
四、字符流实例
-
package io;
-
-
import java.io.File;
-
import java.io.FileReader;
-
import java.io.FileWriter;
-
import java.io.IOException;
-
import java.io.Reader;
-
import java.io.Writer;
-
-
/*
-
* 1.找源或目标
-
* 2.创建管道并和源或目标连接上
-
* 3.IO操作
-
* 4.关闭资源
-
*/
-
-
/**
-
* 操作字符和字节流:仅仅是管道类型不一样和操作的单位不一样
-
*
-
* @author will
-
*
-
*/
-
public class CharDemo {
-
-
/**
-
* 使用字符输入流取读取数据
-
*
-
* @param srcF
-
*/
-
public static void read(File srcFile) {
-
Reader reader = null;
-
try {
-
reader = new FileReader(srcFile);
-
// IO操作
-
-
char[] buff = new char[1024];// 创建一个大小为1024个字符的缓冲区
-
-
int len = 0;// 表示读取的字符长度
-
while ((len = reader.read(buff)) != -1) {
-
// 数据依然在缓冲区里
-
String data = new String(buff, 0, len);
-
System.out.println(data);
-
}
-
} catch (IOException e) {
-
e.printStackTrace();
-
} finally {
-
if (reader != null) {
-
try {
-
reader.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
-
public static void write(File destFile) throws IOException {
-
Writer w = new FileWriter(destFile);
-
-
w.write("爱老虎油".toCharArray());
-
-
w.write("哈哈哈哈哈哈哈哈,嘻嘻嘻,呵呵呵");
-
w.write("\n");
-
w.write("青羊区的天是艳阳的天,");
-
w.write("\n");
-
w.write("成都市的人民好喜欢,");
-
w.write("\n");
-
w.write("站在高楼大声喊:");
-
w.write("\n");
-
w.write("我爱你,四川!");
-
w.write("\n");
-
-
// w.flush();
-
w.close();
-
}
-
-
public static void main(String[] args) throws IOException {
-
// File srcFile = new File("src/io/CharDemo.java");
-
// read(srcFile);
-
-
// write(new File("SpringBrother.java"));
-
-
//copy("src/io/CharDemo.java","src/io/CharDemo2.java");
-
copy("ps.jpg","钓丝.jpg");
-
}
-
-
public static void copy(String src, String dest) {
-
-
try (
-
// 打开资源
-
Reader r = new FileReader(src);
-
Writer w = new FileWriter(dest);)
-
{
-
char[] buff = new char[1024];
-
int len = 0;
-
while ((len = r.read(buff)) != -1) {
-
w.write(buff, 0, len);
-
}
-
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
五、文件copy实例
-
package io;
-
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.FileNotFoundException;
-
import java.io.FileOutputStream;
-
import java.io.IOException;
-
import java.io.InputStream;
-
import java.io.OutputStream;
-
-
public class CopyDemo {
-
public static void main(String[] args) {
-
-
if(args.length != 2){
-
System.out.println("参数传递错误!");
-
System.exit(1);
-
}
-
File srcFile = new File(args[0]);
-
File targetFile = new File(args[1]);
-
copy(srcFile, targetFile);
-
System.out.println("OK");
-
}
-
-
/**
-
* 拷贝文件
-
*
-
* @param srcFile
-
* 源文件
-
* @param targetFile
-
* 目标文件
-
* @throws IOException
-
*/
-
public static void copy(File srcFile, File targetFile) {
-
-
/**
-
* 1.找到源和目标,已经有了 2.创建管道,需要2个管道 3.IO操作 4.关闭资源
-
*/
-
-
if(srcFile == null || targetFile == null){
-
System.out.println("文件为null");
-
return ;
-
}
-
-
InputStream in = null;
-
OutputStream out = null;
-
try {
-
in = new FileInputStream(srcFile);
-
out = new FileOutputStream(targetFile);
-
-
// 表示1024个字节大小的缓冲区
-
byte[] buff = new byte[1024];
-
// 表示已经读取的字节数,若 len != -1表示文件读完了
-
int len = 0;
-
while ((len = in.read(buff)) != -1) {// 把源文件的数据读取到缓冲区
-
// 取缓冲区取数据,取了数据之后,马上把取到的数据写到一个新的文件里去
-
out.write(buff, 0, len);// 读多少,同时就往外写多少
-
}
-
} catch (FileNotFoundException e) {
-
e.printStackTrace();
-
// throw new IOException(srcFile.getAbsolutePath() +"找不到");
-
} catch (IOException e) {
-
e.printStackTrace();
-
} finally {
-
try {
-
if (out != null) {
-
out.close();
-
}
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
// 无聊out是否关闭,都应该关闭in
-
finally {
-
if (in != null) {
-
try {
-
in.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
}
-
}
文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。
原文链接:brucelong.blog.csdn.net/article/details/80051196
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)