捡起Java——第三天
Java流、文件和IO
在Java.io包中几乎包含了所有的操作输入、输出所需要的类。而这些流类代表输入和输出目标。另外,Java.io包中的流支持很多种格式,一个流可以理解为一个数据的序列。输入流表示从源中读取数据、输出流表示向目标写数据。
输入输出流操作
读取控制台输入
Java的控制台输入由System.in实现。通过将System.in包装在一个BufferedReader对象来创建一个字符流。
基本语法:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
当我们创建了BufferedReader对象之后,我们就可以通过调用read()方法从控制台读取一个字符或者通过readline()方法读取字符串。
基本语法:
int read() throws IOException
解释:当调用read()方法时,它从输入流中读取一个字符并把该字符作为整数值返回。当流结束的时候返回-1,该方法会抛出IOException。
示例1:读取字符
import java.io.*;
public class IoDemo{
public static void main(String[] args)
{
char buf;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
do{
buf = br.read();
System.out.println(buf);
}while(buf != "q");
}
}
示例2:读取字符串
import java.io.*;
public class IoDemo{
public static void main(String[] args)
{
String buf;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
do{
buf = br.readLine();
System.out.println(buf);
}while(buf != "q");
}
}
控制台输出
一般来说,我们所了解的控制台的输出就是通过print()和println()方法实现的。而这些方法都是在类PrintStream所定义的,System.out只是对该类对象的一个引用。
然而,PrintStream类继承了OutputStream类,并且实现了write()方法,那么write()也就能用来进行输出流的写操作。
基本语法:
void write(int byteval)
解释:该方法将byteval的低八位字节写入到流中。
但是由于write方法并不常用,我们主要还是使用print和println方法,因此此处只做简单介绍。
文件读写操作
对于文件读写操作来说,最重要的两个流是FileInputStream和FileOutputStream。下面就分别介绍其用法和功能。
FileInputStream
该流的主要功能是用于从文件中读取数据,可用关键词new进行创建,且存在多种方法来创建对象。
基本语法:
InputStream f = new FileInputStream("C:/java/hello");
//通过使用字符串类型的文件名创建一个输入流对象来进行文件的读取。
File fp = new File("C:/java/hello");
InputStream in = new FileInputStream(fp);
//我们也可以通过先使用File方法创建文件对象,再创建一个输入流对象来读取文件中的内容。
而对于InpuutStream对象,存在以下的一些常见操作:
- close() 关闭输入流并释放资源
- finalize() 清除和文件的连接
- read(int r) 从InputStream对象中读取指定的字节数据,返回值为整数
- read(byte[] r) 从输入流中读取r.length长度的字节,返回读取的字节数。
- available() 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。
FileOutputStream
该类用于创建文件并向其写入数据。如果在输出数据前文件不存在,那么就会创建新文件,有两种构造方法创建FileOutputStream对象。
基本语法:
OutputStream f = new FileOutputStream("C:/java/hello");
//通过字符串类型的文件名创建输出流对象
File fp = new File("C:/java/hello");
OutputStream fOut = new FileOutputStream(fp);
//先创建文件对象,再创建输出流对象进行写操作。
同样,也有一些常规操作:
- close() 关闭文件输入流且释放资源
- finalize() 清除与文件的连接
- write(int w) 将指定的字节写入输出流中
- write(byte[] w) 将指定数组中w.length长度的字节写入到输出流中
文件和IO
对于文件和IO的类,最主要的有三个:
- File class
- FileRead class
- FileWrite class
目录操作
创建目录
在File类中存在两个方法用以创建文件夹
- mkdir() 创建文件夹,如果不存在就返回true,否则返回false。如果路径错误也会返回false。
- mkdirs() 创建一个文件夹和它所有的父文件夹。
读取目录
一个目录也就是一个File对象,包含其他文件和文件夹,如果创建一个File对象且还是一个目录的话,那么调用isDirectory()方法就会返回true。使用list()方法可以提取File对象包含的文件和文件夹列表。
删除目录或文件
使用java.io.File.delete()方法。但是在删除目录时,必须确保该目录下不存在其他文件,否则就会失败。