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 个字符的数组
FileReader fr = new FileReader(filePath);
int num = fr.read(a); //将数据读入到数组 a 中,并返回字符数
String str = new String(a,,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 = ; i < ; 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) {
}
}
标准输入输出
- 标准输入:标准输入 System.in 是 BufferedInputStream 类的对象,当程序需要从键盘上读入数据时,只需要调用 System.in 的 read()方法即可,该方法从键盘缓冲区读入一个字节的二进制数据,返回以此字节为低位字节,高位字节为 0 的整型数据。
- 标准输出:标准输出 System.out 是打印输出流 PrintStream 类的对象。PrintStream 类是过滤输出流类 FilterOutputStream 的一个子类,其中定义了向屏幕输出不同类型数据的方法print()和 println()。
- 标准错误输出: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 又可将压缩的数据进行还原。
つづけ
Java基础知识学习(八)的更多相关文章
- Java基础知识学习(九)
GUI开发 先前用Java编写GUI程序,是使用抽象窗口工具包AWT(Abstract Window Toolkit).现在多用Swing.Swing可以看作是AWT的改良版,而不是代替AWT,是对A ...
- java基础知识学习笔记
本文知识点以js为参照.对比分析得出笔记.JavaScript之所以叫JavaScript是打算借助java推广自己.虽然都是开发语言,但JavaScript一开始主要运行在 客户端,而java主要运 ...
- Java基础知识学习(三)
面向对象部分 首先要了解面向对象的思想,与C#一致,都是面向对象的语言 访问修饰符 public 共有的,对所有类可见. protected 受保护的,对同一包内的类和所有子类可见. private ...
- Java基础知识学习(一)
部门接了新项目,后台使用Java框架play framework,前端是html,前后台通过rest交互,能够支持多端的互联网架构. 因为之前没有Java基础,前端使用的也很少,决定深入学习一下Jav ...
- Java基础知识学习(二)
Java语法基础 数据类型.类型转换.运算符.逻辑运算符.参考C#,基本一致 输入输出 输出 System.out.print("abc"); System.out.printf( ...
- java基础知识学习 内存相关
Java 内存分配策略 静态存储区(方法区):主要存放静态数据.全局 static 数据和常量.这块内存在程序编译时就已经分配好,并且在程序整个运行期间都存在. 栈区 :当方法被执行时,方法体内的局部 ...
- Java基础知识学习(七)
线程(续) 线程同步 当两个或两个以上的线程需要共享资源,它们需要某种方法来确定资源在某一刻仅被一个线程占用.达到此目的的过程叫做同步(synchronization) 可以用两种方法同步化代码.两者 ...
- Java基础知识学习(六)
多线程 先了解线程的概念 多线程需要注意的地方 优先级.线程同步.消息传递.数据共享.死锁等 Java线程类 Thread,实现接口 Runnable Thread常用方法 getName 获得线程名 ...
- Java基础知识学习(五)
高级特性:接口 接口(Interface) 1) 接口中只能定义抽象方法,默认为 public abstract 的,变量可以是static的 2) 接口中没有构造方法 3) 一个接口不实现另一个接口 ...
随机推荐
- C#控件绑定数据源方式
1:控件数据源绑定泛型Dictionary<string,string> ): Dictionart<string,string> D=new Dictionary(strin ...
- 关于ASP.NET的“Forms身份验证”
目录结构如图如示: 如果用户没有通过身份验证则跳转到登录页面让用户登录,在配置文件的<system.web></system.web>结点下添加如下代码: <!--身份验 ...
- 说说这篇「我为什么从python转向go
作者 CMGS2015.05.17 15:47* 写了7891字,被143人关注,获得了97个喜欢 说说这篇「我为什么从python转向go」 字数3748 阅读24227 评论21 喜欢81 恩看了 ...
- dmesg 的时间戳处理
dmesg_with_human_timestamps () { $(type -P dmesg) "$@" | perl -w -e 'use strict; my ($upti ...
- c++错误代码1
今天敲c++,出现一个错误,这个题目错误代码如下: 并没有提示有错误而终止. 运行结果却错了: 很明显,错误的地方是变量r没有初始化. 这让我知道了,这种情况下的某些变量未经初始化而使用编译器是不会报 ...
- C#实现WebService服务 项目完整总结
先说一下这个项目做了什么.先介绍一下背景(备注一下,每次项目发生更改之后,要进行clean 和rebuild两个操作,否则最新的更改保存不到exe文件中,这样上线后的系统还是执行得原有的已编译过的程序 ...
- 【LeetCode】389 Find the Difference(java)
原题 Given two strings s and t which consist of only lowercase letters. String t is generated by rando ...
- 树链剖分求LCA
树链剖分中各种数组的作用: siz[]数组,用来保存以x为根的子树节点个数 top[]数组,用来保存当前节点的所在链的顶端节点 son[]数组,用来保存重儿子 dep[]数组,用来保存当前节点的深度 ...
- python CGI编程Apache配置
1. 编辑http.conf,添加两行,路径可以自定义 <Directory "C:/AppServ/www/cgi-bin"> AllowOverride None ...
- adb 常用命令总结
1. adb / adb -help 使用帮助 2. adb devices 查看连接到电脑的设备 3. adb install example.apk 安装程序 4. adb -s emulator ...