Java基础知识学习(八)

IO操作

5个重要的类分别是:InputStream、OutStream、Reader、Writer和File类

面向字符的输入输出流

输入流都是Reader的子类,

CharArrayReader 从字符数组读取的输入流
BufferedReader 缓冲输入字符流
PipedReader 输入管道
InputStreamReader 将字节转换到字符的输入流
FilterReader 过滤输入流
StringReader 从字符串读取的输入流
LineNumberReader 为输入数据附加行号
PushbackReader 返回一个字符并把此字节放回输入流
FileReader 从文件读取的输入流

使用 FileReader 类读取文件时,必须先调用 FileReader()构造方法创建 FileReader 类的对象,再调用 read()方法。FileReader 构造方法的格式为:
public FileReader(String name);  //根据文件名创建一个可读取的输入流对象

public static void main(String args[]) throws IOException{
        char a[] = new char[1000]; //创建可容纳 1000 个字符的数组
        FileReader fr = new FileReader(filePath);
        int num = fr.read(a); //将数据读入到数组 a 中,并返回字符数
        String str = new String(a,0,num); //将字符串数组转换成字符串
        System.out.println("读取的字符个数为:"+num+",内容为:\n");
        System.out.println(str);
        fr.close();          //流需要关闭
}

BufferedReader 类是用来读取缓冲区中的数据。使用时必须创建 FileReader 类对象

    public static void main(String args[]) throws IOException {
        String line;
        try {
            FileReader fr = new FileReader(filePath);
            BufferedReader br = new BufferedReader(fr);
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            br.close();
        } catch (IOException e) {
            System.out.println(e);
        }
    }

面向字符的输出流都是类 Writer 的子类

Reader类都有对应的Writer类

在使用 FileWriter 类写入文件时,必须先调用 FileWriter()构造方法创建 FileWriter 类的对象,再调用 writer()方法。

try {
    FileWriter a = new FileWriter(filePath, true);
    for (int i = 0; i < 100; i++) {
        a.write(i);
    }
    a.close();
} catch (IOException e) {
}

BufferedWriter 类是用来将数据写入到缓冲区。使用时必须创建 FileWriter 类对象,再以该对象为参数创建 BufferedWriter 类的对象,最后需要用 flush()方法将缓冲区清空。

调用 out 对象的 write()方法写入数据时,不会写入回车,因此需要使用newLine()方法在每行数据后加入回车,进行换行

public static void main(String args[]) throws IOException {
    String str = new String();
    try {
        BufferedReader in = new BufferedReader(new FileReader(filePath));
        BufferedWriter out = new BufferedWriter(new FileWriter(targetFile));
        while ((str = in.readLine()) != null) {
            System.out.println(str);
            out.write(str); // 将读取到的 1 行数据写入输出流
            out.newLine(); // 写入换行符
        }
        out.flush();
        in.close();
        out.close();
    } catch (IOException e) { }
}

面向字节的输入输出流

InputStream类和OutputStream类是所有字节流的父类

使用类似Reader和Writer类,区别是需要写入或读出字节

public static void main(String args[]) throws IOException {
    try {
        FileInputStream fis = new FileInputStream(new File(filePath));

        byte[] b = new byte[fis.available()];// 新建一个字节数组
        fis.read(b);// 将文件中的内容读取到字节数组中
        fis.close();
        String str2 = new String(b);// 再将字节数组中的内容转化成字符串形式输出
        System.out.println(str2);

        FileOutputStream fos = new FileOutputStream(new File(targetFile));
        fos.write(b);
        fos.close();
    } catch (Exception e) {
    }
}

标准输入输出

  1. 标准输入:标准输入 System.in 是 BufferedInputStream 类的对象,当程序需要从键盘上读入数据时,只需要调用 System.in 的 read()方法即可,该方法从键盘缓冲区读入一个字节的二进制数据,返回以此字节为低位字节,高位字节为 0 的整型数据。
  2. 标准输出:标准输出 System.out 是打印输出流 PrintStream 类的对象。PrintStream 类是过滤输出流类 FilterOutputStream 的一个子类,其中定义了向屏幕输出不同类型数据的方法print()和 println()。
  3. 标准错误输出:System.err 用于为用户显示错误信息,也是由 PrintStream 类派生出来的错误流。Err 流的作用是使 print()和 println()将信息输出到 err 流并显示在屏幕上,以方便用户使用和调试程序。

文件和目录

File类

每个 File 类对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息。通过调用 File 类提供的各种方法,能够创建、删除、重名名文件、判断文件的读写权限以及是否存在,设置和查询文件的最近修改时间等。

构造方法以及类方法列表:http://www.weixueyuan.net/view/6047.html

RandomAccessFile 类

使用这个类,可以跳转到文件的任意位置读写数据。程序可以在随机文件中插入数据,而不会破坏该文件的其他数据。此外,程序也可以更新或删除先前存储的数据,而不用重写整个文件。

long length() 返回文件长度
void seek(long pos) 移动文件位置指示器,pos 指定从文件开头的偏离字节数
int skipBytes(int n) 跳过 n 个字节,返回数为实际跳过的字节数
int read() 从文件中读取一个字节,字节的高 24 位为 0,若遇到文件结尾,返回-1
final byte readByte() 从文件中读取带符号的字节值
final char readChar() 从文件中读取一个 Unicode 字符
final void writeChar(inte c) 写入一个字符,两个字节

文件压缩

Java.util.zip 包中提供了可对文件的压缩和解压缩进行处理的类,它们继承自字节流类OutputSteam 和 InputStream。其中 GZIPOutputStream 和 ZipOutputStream 可分别把数据压缩成 GZIP 和 Zip 格式,GZIPInpputStream 和 ZipInputStream 又可将压缩的数据进行还原。

つづけ

时间: 2024-10-24 14:04:04

Java基础知识学习(八)的相关文章

Java基础知识学习(九)

GUI开发 先前用Java编写GUI程序,是使用抽象窗口工具包AWT(Abstract Window Toolkit).现在多用Swing.Swing可以看作是AWT的改良版,而不是代替AWT,是对AWT的提高和扩展.所以,在写GUI程序时,Swing和AWT都要作用.它们共存于Java基础类(Java Foundation Class,JFC)中. AWT依赖于主平台绘制用户界面组件:而Swing有自己的机制,在主平台提供的窗口中绘制和管理界面组件.Swing与AWT之间的最明显的区别是界面组

java基础知识学习笔记(四)

类与对象 java是一种面向对象的开发语言.java程序是由类与对象组成的.类与对象之间有什么关系呢? 类是构造对象的蓝图或模板.由类构造对象的过程,称之为创建类的实例.可知对象就是类的一种实例或具体实现.为什么为选用java语言做开发,这种面向对象的语言对开发有什么好处? 首先,从设计上,对一个问题,你可以暂且不管它的具体实现是什么,先把它抽象成一个对象,问题中涉及到的数据,变成对象中的实例域,求解问题的方法,变成对象中的方法,这样做可以分清要对哪些数据进行操作,逻辑上比较清晰. 其次,当问题

Java基础知识(八)

1.      Java Web 页面请求的工作流程是怎样的 浏览器是一个工具软件:1)完成与服务器端的交互:2)完成HTML(超文本语言)的解析.从而实现把用户需要查看的资源信息以直观的形式展现出来. 上述流程中2浏览器把请求组装成指定的格式发送给服务器,客户端与服务器端之间通过HTTP来完成具体的交互.其中请求的数据流主要包含HTTP(超文本传输协议,建立在TCP/IP基础上的一个协议,主要用来实现客户端与服务器端之间的通信),请求方法(GET或POST).请求网址(URL,统一资源定位符)

java基础知识学习

Java 内存分配策略 静态存储区(方法区):主要存放静态数据.全局 static 数据和常量.这块内存在程序编译时就已经分配好,并且在程序整个运行期间都存在. 栈区 :当方法被执行时,方法体内的局部变量(其中包括基础数据类型.对象的引用)都在栈上创建,并在方法执行结束时这些局部变量所持有的内存将会自动被释放.因为栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. 堆区 : 又称动态内存分配,通常就是指在程序运行时直接 new 出来的内存,也就是对象的实例.这部分内存在不使

Java基础知识学习笔记(一)

理解面向对象: Java纯粹的面向对象的程序设计语言,主要表现为Java完全支持面向对象的三个基本特征:继承.封装.多态. Java程序的最小单位是类,类代表客观世界中具有某种特征的一类事物,这些类可以生成系统中的多个对象,而这些对象直接映射成客观世界的各种事物,整个Java程序由一个一个的类组成. 结构化(主张按功能把软件逐步细分,面向功能)/面向对象程序设计:(分析>设计>编程)SA/OOA > SD/OOD > SP/OOP 结构化程序设计最小的程序单元是函数,每个函数都负责

JAVA 基础知识学习笔记 名称解释

Java ee:? IDE: ? itegrity   development environment 集成开发环境 JMS:? java Message Service java   信息服务 JMX? Java Management Extensions,即Java管理扩展 JNDI:(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司 提供的一种标准的Java命名系统接口,JNDI提供统一的客户端 API,通过不同的访问提供者接口J

Java基础知识学习12-常用的API-03

基本数据类型的包装类 基本数据类型如int.float.double.boolean.char等是不具备对象的特征,比如:不能调用方法,功能比较简单.为了让基本数据类型具有对象的特征,Java为每个基本数据类型都提供了一个包装类,这样就具备了对象的特征. 将字符串转为基本类型的方法  通用格式:包装类.parseXxxx(String str) int a=Integer.parseInt("123456"); System.out.println(a+1); 将基本类型转换为字符串

java基础知识学习笔记

文件下载地址:http://pan.baidu.com/s/1o8irE2Y

Java基础知识陷阱(八)

本文发表于本人博客. 这次我来说说关于&跟&&的区别,大家都知道&是位运算符,而&&是逻辑运算符,看下面代码: public static void main(String[] args) throws Exception { int a = 1; int b = 2; int c = a & b; if(a >= 1 && b >= 1){ System.out.println("&&条件1&q