11. IO实现读取键盘录入 与 字符流和字节流的转换
System.out标准的输出
System.in标准的输入 static InputStream
in
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out, String charsetName)
创建使用指定字符集的 OutputStreamWriter
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的
将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。 charset
InputStreamReader(InputStream in)
InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的
读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。charset
InputStream in = System.in();
InputStreamReader isr = new InputStreamReader(in); //字符流
BufferedReader br = new BufferedReader(isr); //装饰设计模式---bufferedReader缓冲包装一下,提升性能
//--------BufferedReader br = new BufferedReader(new InputStreamReader(System.in()));(1)
//--------BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\a.txt")));(4)
OutputStream os = System.out();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
//---------BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out()));(2)
//---------BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\a.txt"))); 将输入的文件写入文件(3)
String line = null;
while ((line=br.readline())!=null) {
bw.write(line);
bw.newLine();
bw.flush();
//System.out.println(line);
}
br.close();
使用IO操作的基本规律和技巧:
(1)首先必须明确源和目的:
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
(2)判断操作的文件类型
纯文本:字符流 Reader Writer
其他文件:字节流 InputStream OutputStream
(3)明确具体要使用的对象
通过设备来区分:
源:内存 硬盘 键盘
目的:内存 硬盘 控制台
12. 改变输入、输出设备
在System类中提供了两个静态的方法可以改变输入和输出设备。
static void
setIn(InputStream in)
重新分配“标准”输入流
static void
setOut(PrintStream out)
重新分配“标准”输出流System.setIn(new FileInputStream("D:\\a.txt"));
BufferedReader br = new BufferedReader(new BufferedReader(System.in()));
System.setOut(new PrintStream("D:\\b.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out()));
13. File 类
它既能代表一个文件的名称,又能代表一个目录下一组文件的名称。常用于对文件或文件夹的操作。
File对象也可以作为参数传递给流的构造函数。
File(File parent, String child)
根据
parent 抽象路径名和 child 路径名字符串创建一个新 File
实例
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File
实例。
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File
实例。
File file = new File("c:\\abc\\a.txt");-------File file = new File("c:"+ File.separator +"abc"+ File.separator +"a.txt"); //比较通用
File file = new File("c:\\abc","a.txt");
File f = new File("D:\\abc");
File file = new File(f,"a.txt");--------------这一构造的执行,并没有真正的创建了一个文件或文件夹。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
createNewFile()
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件
File file = new File("c:\\abc\\a.txt");
System.out.print(file.createNewFile());------------如果c:\\abc\\a.txt路径下的文件不存在,那么会返回true,如果已经存在或者创建失败,那么会返回false
boolean delete()
删除此抽象路径名表示的文件或目录
void deleteOnExit()
在虚拟机终止时,请求删除此抽象路径名表示的文件或目录-----在操作结束退出时删除
当我们创建一个文件,并且对这个文件进行操作,如果这一过程中出现异常,那么程序将终止,我们的delete()方法将不会被执行。
但是我们一定要删除这个文件,这时候就要使用deleteOnExit()方法,表示在程序对文件操作结束后,执行次命令,将文件删除。
File file = new File("c:\\abc\\a.txt");
file.deleteOnExit();
code(对文件内容进行操作);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
boolean isDirectory()
测试此抽象路径名表示的文件是否是一个目录。
boolean
isFile()
测试此抽象路径名表示的文件是否是一个标准文件。
boolean
isHidden()
测试此抽象路径名指定的文件是否是一个隐藏文件
File file = new File("c:\\abc\\a.txt");
System.out.print(file.isDirectory()); -------false
System.out.print(file.isFile()); -------false
分析:因为File file = new File("c:\\abc\\a.txt");这条语句是不创建文件或目录的,所以两种判断都为false,那么我们在执行这两种判断时,
有必要先进行判断对应的文件是否存在,如果不存在的话则没必要进行后续判断。
boolean exists()
测试此抽象路径名表示的文件或目录是否存在
boolean mkdir()
创建此抽象路径名指定的目录-----------------只能在现有目录的基础上创建一个级别的目录
boolean mkdirs()
创建此抽象路径名指定的目录,包括所有必需但不存在的父目录------------可以创建多级目录
boolean
isAbsolute()
测试此抽象路径名是否为绝对路径名------无论文件是否存在,只要是绝对路径该方法就会返回true。否则返回false
……………………………………………………………………………………………………………………………………………………………
String
getPath()
将此抽象路径名转换为一个路径名字符串
String
getAbsolutePath()
返回此抽象路径名的绝对路径名字符串
File file = new File(当这里是一个绝对路径的时候,上述两方法返回值相同);
File
getAbsoluteFile()
返回此抽象路径名的绝对路径名形式。
String
getParent()
返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null
File file = new File("D:\\IO\\abc.txt");
System.out.println("---:"+ file.getAbsoluteFile()); ---:D:\IO\abc.txt
System.out.println("---:"+file.getParent()); ---:D:\IO
File file2 = new File("ac.txt");
System.out.println("^^^:"+ file2.getAbsoluteFile()); ^^^:D:\IO\ac.txt
System.out.println("^^^:"+file2.getParent()); ^^^:null
System.out.println("---:"+file.getPath()); ---:D:\IO\abc.txt
System.out.println("---:"+file2.getPath()); ---:ac.txt
*************************************************************************************************************************