文本I/O与二进制I/O  

  在计算机中所有的文件都是以二进制的形式来存储的,所以本质上所有的文件都是二进制文件。
  文本I/O建立在二进制I/O的基础之上,它能提供字符层次的编码和解码的抽象,在写入一个字符时,Java虚拟机会将统一码转化为文件指定的编码,读文件同理。而二进制I/O不需要转化。如果使用二进制I/O向文件写入一个数值,就是将内存中的确切值复制到文件中。
  由于二进制I/O不需要编码和解码,所以,二进制I/O比文本I/O效率高。
  二进制文件与主机的编码方案无关,因此,它是可移植的。在任何机器上的Java程序可以读取Java程序所创建的二进制文件。

Java 文本I/O

  java.io.File file = new java.io.File("hello.java");
    文件和目录路径名的抽象表示形式。
    File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。
      ->为在当前目录下的文件hello.txt创建一个File对象
      ->也可以是明确的绝对路径,如"/Users/zhengbinMac/Workspaces/hello.java"
      ->在Windows中目录的分隔符是反斜杠(\),但是在Java中,反斜杠是一个特殊字符,所以应该写为\\。

  java.io.PrintWriter = new java.io.PrintWriter("File file");
    使用指定文件创建不具有自动行刷新的新 PrintWriter。
    可用于创建一个文件并向文本文件写入数据。
    会报出FileNotFoundException异常。

  java.util.Scanner s = new java.util.Scanner(File);
    创建一个所产生的值都是从特定文件扫描而来的扫描器
  java.util.Scanner s = new java.util.Scanner(String);
    创建一个所产生的值都是从特定字符串扫描而来的扫描器

  1. public class ReplaceDate{
  2. public static void main(String args[]) {
  3. try{
  4. java.io.File f1 = new java.io.File("/Users/zhengbinMac/Workspaces/Revise Java/Files and I:O/123.txt");
  5. System.out.println(f1.exists());
  6. java.util.Scanner input = new java.util.Scanner(f1);
  7. java.io.File f2 = new java.io.File("/Users/zhengbinMac/Workspaces/Revise Java/Files and I:O/321.txt");
  8. System.out.println(f2.getAbsolutePath());
  9. java.io.PrintWriter output = new java.io.PrintWriter(f2);
  10. String s1 = new String();
  11. if(input.hasNext()){
  12. s1 = input.nextLine();
  13. String s2 = s1.replaceAll("Hello","OK1");
  14. output.println(s2);
  15. }
  16. input.close();
  17. output.close();
  18. }catch(java.io.FileNotFoundException e){
  19. e.getStackTrace();
  20. }
  21. }
  22. }

ReplaceDate.java

Java 二进制I/O

  字节流
    Java字节流是用来处理8比特字节的输入和输出。
    java.io.FileInputStream(File/String)
    java.io.FileOutputStream(File/String)

  1. public class CopyFile {
  2. public static void main(String[] args) throws java.io.IOException {
  3. java.io.FileInputStream in = null;
  4. java.io.FileOutputStream out = null;
  5. try{
  6. in = new java.io.FileInputStream("input.txt");
  7. out = new java.io.FileOutputStream("output.txt");
  8. int c;
  9. while((c = in.read()) != -1){
  10. out.write(c);
  11. }
  12. }catch(java.io.IOException e){
  13. e.getMessage();
  14. }finally{
  15. if(in != null){
  16. in.close();
  17. }
  18. if(out != null){
  19. out.close();
  20. }
  21. }
  22. }

CopyFile.java

  

  字符流
    Java字节流是用来处理8比特字节的输入和输出,而字符流用于处理16位,即FileReader与FileWriter一次读写两个字节。

  文件输入流
    InputStream f = new FileInputStream("/Users/zhengbinMac/Workspaces");
      或
    File f = new File("/Users/zhengbinMac/Workspaces");
    InputStream f = new FileInputStream(f);

  文件输出流
    OutputStream f = new FileOutputStream("/Users/zhengbinMac/Workspaces");
      或
    File f = new File("/Users/zhengbinMac/Workspaces");
    OutputStream f = new FileOutputStream(f);

  1. import java.io.*;
  2. public class fileStreamTest{
  3. public static void main(String args[]){
  4. try{
  5. byte bWrite [] = {11,21,3,40,5};
  6. OutputStream os = new FileOutputStream("test.txt");
  7. for(int x=0; x < bWrite.length ; x++){
  8. os.write( bWrite[x] ); // writes the bytes
  9. }
  10. os.close();
  11.  
  12. InputStream is = new FileInputStream("test.txt");
  13. int size = is.available();
  14.  
  15. for(int i=0; i< size; i++){
  16. System.out.print((char)is.read() + " ");
  17. }
  18. is.close();
  19. }catch(IOException e){
  20. System.out.print("Exception");
  21. }
  22. }
  23. }

fileStreamTest.java

扩展:

  1.续写文件,不覆盖原有内容

  1.   public static void fileLogger(String out) throws FileNotFoundException {
  2. File file = new File(path);
  3. if(file.exists()){
  4. file.mkdirs();
  5. }
  6. PrintStream p = new PrintStream(new BufferedOutputStream(new FileOutputStream(file, true)));
  7. p.println(out);
  8. p.close();
  9. }

Java基础——I/O的更多相关文章

  1. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  2. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  3. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

  4. 最适合作为Java基础面试题之Singleton模式

    看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...

  5. java基础练习 字符串,控制流,日历,日期等

    1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...

  6. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  7. Java基础知识【上】(转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  8. java基础学习03(java基础程序设计)

    java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...

  9. Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)

    线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public ...

  10. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

随机推荐

  1. 查看语句运行时间异常的原因(SQLServer)

    转载:http://www.cnblogs.com/fygh/archive/2012/01/17/2324926.html 查看语句运行时间异常的原因(SQLServer)   经常有开发同事反映如 ...

  2. Extension Methods

    Oftentimes you’ll find yourself using classes you can’t modify. Whether they’re basic data types or ...

  3. Unity3D 与 objective-c 之间数据交互。iOS SDK接口封装Unity3D接口

    原地址:http://www.cnblogs.com/qingjoin/p/3638915.html Unity 3D 简单工程的创建.与Xcode 导出到iOS 平台请看这 Unity3D 学习 创 ...

  4. Proxmox虚拟机增加硬盘容量

    1.首先在虚拟机控制台选择调整硬盘容量,弹出窗口为增加的容量 2.重启虚拟机,用fdisk –l查看新增容量是否被识别 3.用cfdisk创建分区,分区格式为Primary 8e (Linux LVM ...

  5. 盘点 DevOps 世界的杰出女性(一)

    [编者按]IT 领域从来不缺乏杰出的女性存在,近日,DevOps.com 主编 Alan Shimel 盘点了 DevOps 领域的杰出女性,首期为六个,本文系 OneAPM 工程师编译整理. 以下为 ...

  6. Lua 的数据结构

    1. Arrays: 注意 #(data), # 加上 table名字 == size of data = {}; , do --行 , do --列 data[(y-)*+x] = (y-)*+x; ...

  7. 【转】12 款优秀的 JavaScript MVC 框架评估

    JavaScript MVC 框架有很多,不同框架适合于不同项目需求.了解各种框架的性能及优劣有利于我们更加快捷的开发.作者(Gordon L.Hempton)一直在寻求哪种MVC框架最为完美,他将目 ...

  8. JAVA WEB中如何让数据库连接对开发人员完全透明?

    书上的技术,确实开了眼界. 列相关测试代码如下,慢慢体会开发的模式. PropsUtil package org.smart4j.chapter2.util; import java.io.FileN ...

  9. codeforces div.1 A

    A. Efim and Strange Grade time limit per test 1 second memory limit per test 256 megabytes input sta ...

  10. IDEA建项目的正确姿势

    今天建多模块的分布式项目的时候折腾死了,可能是建项目的方法不对,最后经过摸索,觉得这样是比较合适的: 首先建一个空的项目:Empty Project,就是项目文件夹 然后在里面建model