文本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);
    创建一个所产生的值都是从特定字符串扫描而来的扫描器

 public class ReplaceDate{
public static void main(String args[]) {
try{
java.io.File f1 = new java.io.File("/Users/zhengbinMac/Workspaces/Revise Java/Files and I:O/123.txt");
System.out.println(f1.exists());
java.util.Scanner input = new java.util.Scanner(f1);
java.io.File f2 = new java.io.File("/Users/zhengbinMac/Workspaces/Revise Java/Files and I:O/321.txt");
System.out.println(f2.getAbsolutePath());
java.io.PrintWriter output = new java.io.PrintWriter(f2);
String s1 = new String();
if(input.hasNext()){
s1 = input.nextLine();
String s2 = s1.replaceAll("Hello","OK1");
output.println(s2);
}
input.close();
output.close();
}catch(java.io.FileNotFoundException e){
e.getStackTrace();
}
}
}

ReplaceDate.java

Java 二进制I/O

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

 public class CopyFile {
public static void main(String[] args) throws java.io.IOException {
java.io.FileInputStream in = null;
java.io.FileOutputStream out = null;
try{
in = new java.io.FileInputStream("input.txt");
out = new java.io.FileOutputStream("output.txt");
int c;
while((c = in.read()) != -1){
out.write(c);
}
}catch(java.io.IOException e){
e.getMessage();
}finally{
if(in != null){
in.close();
}
if(out != null){
out.close();
}
}
}

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);

 import java.io.*;
public class fileStreamTest{
public static void main(String args[]){
try{
byte bWrite [] = {11,21,3,40,5};
OutputStream os = new FileOutputStream("test.txt");
for(int x=0; x < bWrite.length ; x++){
os.write( bWrite[x] ); // writes the bytes
}
os.close(); InputStream is = new FileInputStream("test.txt");
int size = is.available(); for(int i=0; i< size; i++){
System.out.print((char)is.read() + " ");
}
is.close();
}catch(IOException e){
System.out.print("Exception");
}
}
}

fileStreamTest.java

扩展:

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

   public static void fileLogger(String out) throws FileNotFoundException {
File file = new File(path);
if(file.exists()){
file.mkdirs();
}
PrintStream p = new PrintStream(new BufferedOutputStream(new FileOutputStream(file, true)));
p.println(out);
p.close();
}

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. cf 359C

    stl 里的map使用   然后就是快速幂取余 #include <cstdio> #include <cstring> #include <algorithm> ...

  2. 项目后台判断session过期的页面代码

    checksession.jsp <%@page import="com.bn.car.core.Constants"%> <%@page import=&quo ...

  3. Tries

    trie,又称前缀树或字典樹,是一种有序树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的所有子孙都有相同的前缀,也就是这个节 ...

  4. windows service 安装和卸载指令

    添加服务: cd C:\Windows\Microsoft.NET\Framework\v4.0.30319InstallUtil.exe D:\OneKeyWebSiteDeployment\Ser ...

  5. kindeditor.net应用

    1.网址:http://kindeditor.net/docs/usage.html

  6. Web中的监听器【Listener】

    Servlet监听器:Servlet规范中定义的一种特殊类,它用于监听Web应用程序中的ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及 ...

  7. lintcode:哈希函数

    题目: 哈希函数 在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数.一个好的哈希函数可以尽可能少地产生冲突.一种广泛使用的哈希函数算法是使用数值33,假 ...

  8. 什么是struts2?

    一.我对struts2的理解. 1.struts2 是一个按MVC模式设计放入web层框架,其实它就是一个servlet.这个servlet命名为ActionServlet,或者是它的一个子类.它的工 ...

  9. ios开发跳转

    如果我的是A->B->C后,我想直接从 C->A 应该怎么做???这是我的问题    看了这个帖子不太明白      这是10楼的解决办法 , 虽然 写的很清楚 ,但是还是没懂啊  ...

  10. C++:成员运算符重载函数和友元运算符重载函数的比较

    5.2.4 成员运算符重载函数和友元运算符重载函数的比较 (1)对双目运算符而言,成员运算符重载函数参数表中含有一个参数,而友元运算符重载函数参数表中有两个参数:对于单目运算符而言,成员运算符重载函数 ...