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 程 ...
随机推荐
- 查看语句运行时间异常的原因(SQLServer)
转载:http://www.cnblogs.com/fygh/archive/2012/01/17/2324926.html 查看语句运行时间异常的原因(SQLServer) 经常有开发同事反映如 ...
- Extension Methods
Oftentimes you’ll find yourself using classes you can’t modify. Whether they’re basic data types or ...
- Unity3D 与 objective-c 之间数据交互。iOS SDK接口封装Unity3D接口
原地址:http://www.cnblogs.com/qingjoin/p/3638915.html Unity 3D 简单工程的创建.与Xcode 导出到iOS 平台请看这 Unity3D 学习 创 ...
- Proxmox虚拟机增加硬盘容量
1.首先在虚拟机控制台选择调整硬盘容量,弹出窗口为增加的容量 2.重启虚拟机,用fdisk –l查看新增容量是否被识别 3.用cfdisk创建分区,分区格式为Primary 8e (Linux LVM ...
- 盘点 DevOps 世界的杰出女性(一)
[编者按]IT 领域从来不缺乏杰出的女性存在,近日,DevOps.com 主编 Alan Shimel 盘点了 DevOps 领域的杰出女性,首期为六个,本文系 OneAPM 工程师编译整理. 以下为 ...
- Lua 的数据结构
1. Arrays: 注意 #(data), # 加上 table名字 == size of data = {}; , do --行 , do --列 data[(y-)*+x] = (y-)*+x; ...
- 【转】12 款优秀的 JavaScript MVC 框架评估
JavaScript MVC 框架有很多,不同框架适合于不同项目需求.了解各种框架的性能及优劣有利于我们更加快捷的开发.作者(Gordon L.Hempton)一直在寻求哪种MVC框架最为完美,他将目 ...
- JAVA WEB中如何让数据库连接对开发人员完全透明?
书上的技术,确实开了眼界. 列相关测试代码如下,慢慢体会开发的模式. PropsUtil package org.smart4j.chapter2.util; import java.io.FileN ...
- codeforces div.1 A
A. Efim and Strange Grade time limit per test 1 second memory limit per test 256 megabytes input sta ...
- IDEA建项目的正确姿势
今天建多模块的分布式项目的时候折腾死了,可能是建项目的方法不对,最后经过摸索,觉得这样是比较合适的: 首先建一个空的项目:Empty Project,就是项目文件夹 然后在里面建model