Java基础——I/O
文本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的更多相关文章
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- 【JAVA面试题系列一】面试题总汇--JAVA基础部分
JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...
- 最适合作为Java基础面试题之Singleton模式
看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...
- java基础练习 字符串,控制流,日历,日期等
1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...
- Java基础知识【下】( 转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- Java基础知识【上】(转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- java基础学习03(java基础程序设计)
java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...
- Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)
线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
随机推荐
- make -f dc_debug.mak 提示错误"/usr/bin/ld:can not find -l***"解决办法
在公司不同服务器上"make -f ***"程序的时候,有的服务器可以编译通过,有的却提示"/usr/bin/ld:can not find -l***"的错误 ...
- Volatile 说明
Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量.这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低) ...
- Matlab安装
第一步:下载MATLAB 7.0,下载自己百度下就好. 三个ios文件 第二步:把每个IOS文件直接右键解压就好. 第三步:打开第一个解压文件夹.双击.exe文件 第四步:next之后把序列号黏贴上去 ...
- Intent (一)
1,简介 Intent 是一种消息传递机制,可以理解为一种对消息的封装,执行某操作的抽象描述,可用于应用程序内部及应用程序之间 其组成包括: 要执行的动作(action) 如VIEW_ACTION(查 ...
- HBase入门
/×××××××××××××××××××××××××××××××××××××××××/ Author:xxx0624 HomePage:http://www.cnblogs.com/xxx0624/ ...
- PowerDesigner修改设计图中文字的字体大小等样式
设计图中默认的字体是对英文比较合适的,中文就看不清楚了,特别不美观.但是可以通过修改“Display Preferences”适应我们的汉字. 我使用的PowerDesigner版本是15.1(测试版 ...
- sublime 复制黏贴等快捷键修改
在 keyboard-binding user 里 增加个人配置来覆盖默认配置 [ { "keys": ["ctrl+z"], "command&qu ...
- fhq_treap 总结
今天跟着zcg大神学了一发fhq_treap 发现在维护区间问题上fhq_treap不仅思维量小,而且代码量更小 是Splay的不错的替代品,不过至今还是有一些问题不能很好的解决 譬如查询某个数在序列 ...
- 李洪强iOS开发之【零基础学习iOS开发【01-前言】03-前景和难易度分析
一.iOS开发的前景 2012年3月份,苹果公司的市值已经突破5000亿美元,成为世界上市值最大的公司.5000亿是神马概念呢? 可以帮助陷入欧债危机的8个国家偿还债务 可以买下35个天安门广场.34 ...
- git Unstaged changes after reset
转载:http://my.oschina.net/yuzn/blog/150275 相信大家都做过这个操作,就是本地做了修改后,不想提交,想恢复如初 git reset HEAD 这样的话,我们就 ...