JavaIO流文件的操作总结
2016-03-11 10:25
597 查看
IO流的分类
1、根据数据的流向:
输入流:用来读数据,如从外界设备读数据到内存中;
输出流:用来写数据,如从内存输出数据到外界存储设备;
2、根据数据流的格式:
字节流:一般用于声音或者秃瓢等二进制数据流,如InputStream OutputStream;
字符流:一般用于处理文本数据如(*.txt),比如InputStreamReader OutputStreamWriter;
3、根据数据流的构造函数区分包装流和原始流:
包装流:在实例化流的时候需要传入另一个流作为自己构造函数的参数,如
java.io.Reader reader = new InputStreamReader(new FileInputStream(inputFile), "utf-8");
BufferedReader reader = new BufferedReader(new FileReader(inputFileName));
原始流:在实例化流的时候不需要传入另一个流作为自己构造函数的参数,如
InputStream is= new FileInputStream(inputFile);
![](http://images2015.cnblogs.com/blog/872419/201603/872419-20160311085832382-583874417.jpg)
1、按字节来读写文件(以字节来读写文件,一般用于读写二进制文件如图片、声音、影音等等)
2、按字符来读写文件(以字符来读取文件,一般用于读写文本或数字类的文件)
3、按行来读取文件(以行为单位读取文件,一般用于读取面向行的格式化文件)
1、根据数据的流向:
输入流:用来读数据,如从外界设备读数据到内存中;
输出流:用来写数据,如从内存输出数据到外界存储设备;
2、根据数据流的格式:
字节流:一般用于声音或者秃瓢等二进制数据流,如InputStream OutputStream;
字符流:一般用于处理文本数据如(*.txt),比如InputStreamReader OutputStreamWriter;
3、根据数据流的构造函数区分包装流和原始流:
包装流:在实例化流的时候需要传入另一个流作为自己构造函数的参数,如
java.io.Reader reader = new InputStreamReader(new FileInputStream(inputFile), "utf-8");
BufferedReader reader = new BufferedReader(new FileReader(inputFileName));
原始流:在实例化流的时候不需要传入另一个流作为自己构造函数的参数,如
InputStream is= new FileInputStream(inputFile);
![](http://images2015.cnblogs.com/blog/872419/201603/872419-20160311085832382-583874417.jpg)
1、按字节来读写文件(以字节来读写文件,一般用于读写二进制文件如图片、声音、影音等等)
/** * 字节读写文件 * @param inputFileName * @param outPutFileName */ public static void readerAndWriteFileByBytes(String inputFileName,String outPutFileName){ File inputFile = new File(inputFileName); File outputFile = new File(outPutFileName); InputStream is = null; OutputStream os = null; try { is = new FileInputStream(inputFile); os = new FileOutputStream(outputFile); byte[] tempBytes = new byte[100]; int byteread = 0; while((byteread = is.read(tempBytes))!=-1){ os.write(tempBytes, 0, byteread); } is.close(); os.close(); } catch (IOException e) { e.printStackTrace(); } System.out.println("字节读写文件完成"); }
2、按字符来读写文件(以字符来读取文件,一般用于读写文本或数字类的文件)
/** * 按字符读取文件并写出到另一个文件(一次读取一个字符) * @param inputFileName * @param outPutFileName */ private static void readAndWriteFileByOneChar(String inputFileName,String outPutFileName) { File inputFile = new File(inputFileName); File outputFile = new File(outPutFileName); Reader reader = null; Writer writer = null; try { reader = new InputStreamReader(new FileInputStream(inputFile), "utf-8"); writer = new OutputStreamWriter(new FileOutputStream(outputFile),"utf-8"); int tempChar; while((tempChar=reader.read())!=-1){ writer.write(tempChar); } reader.close(); writer.close(); System.out.println("按单个字符读写文件结束。。。"); } catch (IOException e) { e.printStackTrace(); } } /** * 按字符读取文件并写出到另一个文件(一次读取多个字符) * @param inputFileName * @param outPutFileName */ private static void readAndWriteFileByChars(String inputFileName,String outPutFileName) { File inputFile = new File(inputFileName); File outputFile = new File(outPutFileName); Reader reader = null; Writer writer = null; try { reader = new InputStreamReader(new FileInputStream(inputFile), "utf-8"); writer = new OutputStreamWriter(new FileOutputStream(outputFile),"utf-8"); int tempChar; // 一次读多个字符 char[] tempchars = new char[30]; while((tempChar=reader.read(tempchars))!=-1){ if(tempChar == tempchars.length && (tempchars[tempchars.length - 1] != '\r')){ writer.write(tempChar); }else{ for(int i=0;i<tempchars.length;i++){ if (tempchars[i] == '\r') { continue; } else { writer.write(tempchars[i]); } } } } reader.close(); writer.close(); System.out.println("按多个字符读写文件结束。。。"); } catch (IOException e) { e.printStackTrace(); } }
3、按行来读取文件(以行为单位读取文件,一般用于读取面向行的格式化文件)
/** * 读取一个文件写入到另一个文件 * @param inputFileName 读取文件的路径 * @param outputFileName 写出文件的路径 */ public static void readAndWriteFileByLine(String inputFileName,String outputFileName){ BufferedReader reader = null; BufferedWriter writer = null; try { writer = new BufferedWriter(new FileWriter(outputFileName)); reader = new BufferedReader(new FileReader(inputFileName)); String tempStr =null; while((tempStr=reader.readLine())!=null){ writer.append(tempStr); writer.newLine(); //换行 writer.flush(); //及时清除流的缓冲区,万一文件过大就无法写入了 } } catch (IOException e) { e.printStackTrace(); }finally{ if(reader!=null || writer!=null){ try { reader.close(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } System.out.println("文件写入成功"); } }
相关文章推荐
- The import android.support cannot be resolved(Eclipse的v4包问题)
- eclipse中Build Path-Add to Build Path相应到androidstudio的设置
- Java开发中的23种设计模式详解(转)
- eclipse->project->clean…到底有什么用?
- 《深入理解Java虚拟机》
- JAVA 集合
- Java 删除项目中的.svn信息
- JAVA内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- Java基础--线程池的应用
- Ubuntu安装浏览器Java扩展
- 做一个合格的程序猿之浅析Spring IoC源码(六)BeanFactoryPostProcessor
- java进度条代码
- java操作xml文件
- 将java的Date转换成Solr的时间格式
- List判断非空
- Java编程初体验:列主元素高斯消去法
- 秒杀系统设计详解
- 深入浅出之Spring第一章Spring介绍
- java 反射机制
- java中怎样表示一个无穷大? 无穷小?