【Java-IO】IO入门
来源:互联网 发布:天猫直通车优化 编辑:程序博客网 时间:2024/04/20 08:25
根据处理的对象分为:字节流和字符流
字节流可以处理所有的数据:通常以“Stream”结尾,读取一个字节,返回一个字节。
字符流则只能处理纯文本数据:通常以“Reader”或者“Writer”结尾,需要通过查找编码表,才能返回字符
一、字节流读写文件
try {FileInputStream fis = new FileInputStream("files/test.txt");FileOutputStream fos = new FileOutputStream("files/new.txt");byte[]bytes = new byte[1024];while(fis.read(bytes)!=-1){fos.write(bytes);}System.out.println("copy done");fos.close();fis.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
注意点:
1. 记得读写完成,要close();
2. FileInputStream.read(byte[])返回的是读取byte到缓存的长度,如果没有了,返回-1
3. 如果读取byte[]后想转成String,最好设置编码
try {FileInputStream fis = new FileInputStream("files/test.txt");byte[] input = new byte[1024];fis.read(input);String inputString = new String(input,"UTF-8");System.out.println(inputString);fis.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e){e.printStackTrace();}
写数据也一样
try{FileOutputStream fos = new FileOutputStream("files/test.txt");String s = "这是我写入txt的内容";byte[] bytes = s.getBytes("UTF-8");fos.write(bytes);System.out.println("写入完成");fos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
二、字符流读写文件
try {FileInputStream fis = new FileInputStream("files/test.txt");FileOutputStream fos = new FileOutputStream("files/new.txt");InputStreamReader isr = new InputStreamReader(fis, "UTF-8");OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");char[] temp = new char[50];int len = 0;while((len = isr.read(temp))!=-1){osw.write(temp, 0, len);//osw.write(temp);//System.out.print(temp);}System.out.println("copy done");osw.close();fos.close();isr.close();fis.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
注意点:
1. 获取read数据的时候,得注意长度,因为最后一次读取的时候,往往不能填满char[]
2. 输入和输出流的编码得一致
三、带有缓冲区的字符流读写
try {FileInputStream fis = new FileInputStream("files/test.txt");FileOutputStream fos = new FileOutputStream("files/new.txt");InputStreamReader isr = new InputStreamReader(fis, "UTF-8");OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");BufferedReader br = new BufferedReader(isr);//BufferedWriter bw = new BufferedWriter(osw);PrintWriter pw = new PrintWriter(osw,true);String line = null;while((line = br.readLine())!=null){//bw.write(line+"\n");pw.println(line);}//bw.flush();//pw.flush();pw.close();//bw.close();osw.close();fos.close();br.close();isr.close();fis.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
注意点:
1. 使用BufferedReader readline时,读出的字符串是不带\n的
2. 在关闭输出流之前要用flush()强制把缓冲区的内容写出
3. 可以使用PrintWriter的println方法写,这个自带\n,其次PrintWriter在new的时候,可以设置autoflush为true,就不用
在关闭之前flush
四、FileReader和FileWriter
如果只针对简单的纯文本文件进行读写操作,可以使用FileReader和FileWriter来代替FileInputStream以及OutputStream转InpttStreamReader/OutputStreamWriter
try {FileInputStream fis = new FileInputStream("files/test.txt");FileOutputStream fos = new FileOutputStream("files/new.txt");byte[]bytes = new byte[1024];while(fis.read(bytes)!=-1){fos.write(bytes);}System.out.println("copy done");fos.close();fis.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
注意点:
1. 记得flush,记得\n
2. FileReader/Writer 使用的是系统默认的字符集编码,所以可能存在编码的问题。如果出问题了,请使用FileInputStream -> InputStreamReader,并构造时规定编码
- 【Java-IO】IO入门
- Java入门代码--IO
- java io入门程序集合
- Java中的IO流,入门
- java入门10- IO基础
- Java入门IO流--FileInputStream
- Java IO:IO框架
- 【IO】java IO 总结
- Java从入门到精通 - IO输入输出
- java IO文件操作入门经典例子
- java基础入门----IO异常处理方式
- java IO文件操作入门经典例子
- java.io.*下的日志功能入门
- Java入门学习-自我理解IO流
- java入门IO流--FileOutputStream&&FlieInputStream
- java入门IO流--BufferedInputStream&&BufferedOutputStream
- Java转Python入门之IO
- java IO
- Windbg调试命令详解
- zlib的交叉编译 for海思
- 前端猿的成长历程
- hrbust 哈理工oj 2011 一等队形【dp】
- 博客记录
- 【Java-IO】IO入门
- linux下shell通配符说明
- POJ 3273 Monthly Expense【二分】(最大值最小化)
- memcache的一致性hash算法使用
- hdoj4931Happy Three Friends
- hdu1698 Just a Hook(线段树区间修改)
- Object类
- 数组排序及相关各种算法
- Unity3d NGUI的使用_UIScrollView制作滑动列表