JAVA 输入/输出流
本次分3个部分详细解说关于Java.io的使用
1、标准设备输入/输出
a) 标准输入/输出类System.
System类提供的静态方法中,分别以下几类功能:
标准输入、标准输出和错误输出流。
对外部定义的属性和环境变量的访问。
加载文件和库。
快速复制数组。
取得系统时间,即System.currentTimeMillis();
系统退出命令,即System.exit();
Read方法读取一个字节
package Test;
import java.io.IOException;
public class test {
public static void main(String[] args) {
int c;
try {
while ((c = System.in.read()) != 0) {// 读入一个字节
System.out.write(c);// 输出一个字节
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行该程序,在控制台输入一段字符后按回车键,就会调用read()函数的循环,每读到一个字节就会输出一个字节,因此回车前输入的字符串就会原样输出
Read(byte[] b) 读取一个字节数组
package Test;
import java.io.IOException;
public class test {
public static void main(String[] args) {
try {
byte[] b = new byte[100];// 创建字节数组
System.in.read(b);// 读取到数组中
System.out.write(b, 0, 100);// 输出字节数组
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行该程序,输入一个字符串,回车后就会输出回车前字符串的前100个字符。如果你输入的字符串长度小于100,那么补全100个字节,剩余的字节将会使用方框表示,实际上是这个字节没有数据。如果输入的字符串长度大于100,多余的字节就会补抛弃。
循环读取控制台的输入。
package Test;
import java.io.IOException;
public class test {
public static void main(String[] args) {
try {
while (true) {
byte[] b = new byte[100];// 创建字节数组
System.in.read(b);// 读取到数组中
String string = new String(b);
System.out.println(string);
// System.out.write(b, 0, 100);// 输出字节数组
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
控制台读写类Console.
2、文件基本处理
a) 文件操作类File
i. 文件操作类File:对目录或文件的创建、重命名、删除、文件列表、判断是否存在
File 类是Java文件处理的最基础的类,它用于实现对目录的创建、删除、对文件创建、
重命名、删除。因此。File类操作的对象分为两类:目录和文件
例子:
创建文件的四种方法:
public class FileTest {
public static void main(String[] args) {
File path = new File("D:/demo");// 目录对象
File file = new File("D:/demo/test.txt");// 文件对象
File file1 = new File("D:/demo","test.txt");// 目录文件一起创建
File file2 = new File("file://D:/demo/test.txt");// 创建一个新的File实例
File file3 = new File(path,"text.txt");
}
}
if(path.isDirectory()){//是否是目录
...
}
if(file.isFile()){//是否是文件
..FileTest.
}
if(path.exists()){ //检查目录是否存在
}
if(file.exists()){//检查文件是否存在
}
创建目录或文件:
Mkdir():创建一个目录
Mkdirs();创建所有目录
createNewFile();创建一个文件
创建多层目录的时候要用mkdirs(),mkdir()只能在已有目录下创建一个子目录,而对于createNewFi()则需要捕捉IOException。例如:
if(!path.exists()){//如果目录不存在
path.mkdir();
path.mkdirs();
}
if(!file.exists()){//如果文件不存在则创建
try {
file.createNewFile();
} catch (Exception e) {
// TODO: handle exception
}
}
查看目录下的文件列表,并输路径名:
File[] fileList = path.listFiles();
for(int i = 0 ;i<fileList.length;i++){
System.out.println(fileList[i].getAbsolutePath());
}
生命名文件名:
//重命名
file.renameTo(new File("demp.txt"));
//删除目录
path.delete();
//删除文件
file.delete();
ii. 文件搜索FileFilter和FilenameFiter
iii. 文件随机读写类RandomAccessFile.
b) 文件搜索类FileFilter与filenameFilter
c) 文件随机读写类RandomAccessFile.
3、输入/输出流
a) 流的动作原理:包括输入流、输出流、输入流链、输出流链的运作原理
b) 输入字节流InputSteam:共11个实现类,包括如下:
ByteArrayInputStream;
FileOutputStream;
ObjectOutputStream;
StringBufferInputStream;
PipedInputStream;
SequenceInputStream;
FilterInputStream;
BufferedInputStream;
DataInputStream;
LineNumberInputStream;
PushbackInputStream;
c) 输出字节流OutputStream:共8个实现类,包括如下
ByteArrayOutputStream;
FileOutputStream;
ObjectOutputStream;
PipedOutputStream;
FilterOutputStream;
BufferedOutputStream;
DataOutputStream;
PrintStream;
d) 输出字符流Reader:共8个实现类,包括扣下:
CharArrayReader;
FileReader;
StringReader;
PipedReader;
FilterReader;
BufferedReader;
LineNumberReader;
PushbackReader;
e) 输出字符流Writer: 共7个实现类,包括如下:
CharArrayWriter;
FileWriter;
StringWriter;
PipedWriter;
FilterWriter;
BufferedWriter;
PrintWriter;
f) 字节流与字符流的转换:
nputStreamReader;
OutputStreamWriter;