一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
读取控制台输入
为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流。
下面是创建 BufferedReader 的基本语法:
BufferedReader br =new BufferedReader(new
InputStreamReader(System.in));
BufferedReader 对象创建后,我们便可以使用 read() 方法从控制台读取一个字符,或者用 readLine() 方法读取一个字符串。
从控制台读取多字符输入 read() 方法
下面的程序示范了用 read() 方法从控制台不断读取字符直到用户输入 "q"。
//使用 BufferedReader 在控制台读取字符
import java.io.*;
public class BRRead {
public static void main(String args[])throws IOException {
char c;
// 使用 System.in 创建BufferedReader
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入字符, 按下 'q' 键退出。");
// 读取字符
do {
c = (char) br.read();
System.out.println(c);
}while (c !='q');
}
}
运行结果如下:
输入字符, 按下 'q' 键退出。
run
r
u
q
q
从控制台读取字符串 readLine() 方法
下面的程序读取和显示字符行直到你输入了单词"end"。
//使用 BufferedReader 在控制台读取字符
import java.io.*;
public class BRReadLines {
public static void main(String args[])throws IOException {
// 使用 System.in 创建BufferedReader
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
String str;
System.out.println("Enter lines of text.");
System.out.println("Enter 'end' to quit.");
do {
str = br.readLine();
System.out.println(str);
}while (!str.equals("end"));
}
}
以上实例编译运行结果如下:
Enter lines of text.
Enter 'end' to quit.
This is line one
This is line one
This is line two
This is line two
end
end
读写文件
一个流被定义为一个数据序列。输入流用于从源读取数据,输出流用于向目标写数据。
下图是一个描述输入流和输出流的类层次图。
FileInputStream
该流用于从文件读取数据
两种构造方法:
InputStream f = new FileInputStream("C:/java/hello");
File f = new File("C:/java/hello");
InputStream out = new FileInputStream(f);
FileOutputStream
该类用来创建一个文件并向文件中写数据。
如果该目标文件不存在,那么该流会创建该文件。
两个构造方法:
OutputStream f = new FileOutputStream("C:/java/hello")
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
实例
InputStream 和 OutputStream 用法的例子:
二进制写入,可能存在乱码:
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");
}
}
}
解决乱码示例:
//文件名:fileStreamTest2.java
import java.io.*;
public class fileStreamTest2 {
public static void main(String[] args)throws IOException {
File f =new File("a.txt");
FileOutputStream fop =new FileOutputStream(f);
// 构建FileOutputStream对象,文件不存在会自动新建
OutputStreamWriter writer =new OutputStreamWriter(fop, "UTF-8");
// 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
writer.append("中文输入");
// 写入到缓冲区
writer.append("\r\n");
// 换行
writer.append("English");
// 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入
writer.close();
// 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
fop.close();
// 关闭输出流,释放系统资源
FileInputStream fip =new FileInputStream(f);
// 构建FileInputStream对象
InputStreamReader reader =new InputStreamReader(fip, "UTF-8");
// 构建InputStreamReader对象,编码与写入相同
StringBuffer sb =new StringBuffer();
while (reader.ready()) {
sb.append((char) reader.read());
// 转成char加到StringBuffer对象中
}
System.out.println(sb.toString());
reader.close();
// 关闭读取流
fip.close();
// 关闭输入流,释放系统资源
}
}
Java中的目录
创建目录:
File类中有两个方法创建文件夹:
mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。
mkdirs()方法创建一个文件夹和它的所有父文件夹。
读取目录:
一个目录其实就是一个 File 对象,它包含其他文件和文件夹。
如果创建一个 File 对象并且它是一个目录,那么调用 isDirectory() 方法会返回 true。
可以通过调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表。
String s[] = f1.list();
删除目录或文件
当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。
测试目录结构:
/tmp/java/
|-- 1.log
|-- test
import java.io.File;
public class DeleteFileDemo {
public static void main(String args[]) {
// 这里修改为自己的测试目录
File folder =new File("/tmp/java/");
deleteFolder(folder);
}
// 删除文件及目录
public static void deleteFolder(File folder) {
File[] files = folder.listFiles();
if (files !=null) {
for (File f : files) {
if (f.isDirectory()) {
deleteFolder(f);
}else {
f.delete();
}
}
}
folder.delete();
}
}
本文参考 菜鸟教程Java IO