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#】VS2015开发环境的安装和配置(二)2016-08-03更新
分类:C#.VS2015.WPF.ASP.NET MVC.Android.iOS.Unity3D: 更新日期:2016-08-03 按下面介绍的步骤安装即可. 一.安装JDK和Android SDK ...
- 背水一战 Windows 10 (4) - UI: 多窗口
[源码下载] 背水一战 Windows 10 (4) - UI: 多窗口 作者:webabcd 介绍背水一战 Windows 10 之 UI 多窗口 示例1.自定义帮助类,用于简化 Secondary ...
- 开启MySQL日志
找到my.ini(Linux下是my.cnf)文件,在文件里加入下面两行: log="F:/mysqllog/mysql.log" log-bin="F:/mysqllo ...
- Delphi Mac App 名称支持国际化多语显示
作用:在 OSX 图标下方显示 App 中文繁体或简体的名称(系统自动选取) 适用:XE7, XE8 for OSX 操作: 创建一个新工程. 在工程目录下创建二个文件夹(zh_??.lproj)文件 ...
- 我整理的PHP 7.0主要新特性
原文:http://php.net/manual/en/migration70.new-features.php 1.标量参数类型声明 现在支持字符串(string).整型(int).浮点数(floa ...
- FreeBSD应该装gnome3做桌面
目前freebsd pkg包管理体系的repo源多了一些,速度快了很多. 仓库中目前的版本为3.14,安装gnome3很简单. pkg install xorg gnome3 echo "e ...
- easyui textarea回车导致datagrid 数据无法展示的问题
textarea换行 在easyui中的datagrid中使用行内编辑时textarea的换行保存到mysql数据库为\n在textarea中输入回车符 在js读取textarea中的值有\r\n然后 ...
- 【HTML5】Canvas图像
把一幅图像放置到画布上, 使用以下方法: drawImage(Img,x,y); 注:这里的Img必须是一个图像对象. 显示一个canvas图像: <!DOCTYPE html> &l ...
- 【移动适配】移动Web怎么做屏幕适配(三)
复杂纷扰的世界背后,总会有万变不离其宗的简单规则 啃先生 Mar.8th.2016 壹 | Fisrt 前面写了两篇移动适配相关的文章: <移动Web怎么做屏幕适配(一)>重点介绍了怎样利 ...
- AngularJS 学习之路(1)
AngularJS 是一个 JS 框架,适用于以数据操作为主的 SPA (Single Page Application)应用. 不再是 "先查找元素在操作元素",所有操作都以 & ...