IO流:
1.IO(Input Output)是输入输出,要用派生类(子类),分为字节流,字符流,以及字节流向字符流的转换
2.IO主要包括三个部分:流式部分,非流式部分,文件读取部分的与安全相关的类以及与本地操作 系统相关的文件系统的类
3.字节流:二进制文件(jpg,png,mp3.mp4),大概就是图片与音频之类的。
InputStream读取,OutputStream写入
字符流:录入字符
Reader读取,Writer写入
我们不用这些类本身,用他们的子类效果会更好。
4.File类对象可以读取多个平台的文件和目录(文件夹)
5.缓冲区的作用:
提高效率
减少磁盘的IO操作,增加磁盘的寿命
6.先读取,读取时我们可以选择读取什么东西
后写入,写入时我们要提供写入的地点(绝对路径,相对路径)
今天练习题目:
1.题目:从键盘输入文件的内容和要保存的文件名称,
之后根据输入的名称创建文件,并将内容保存的文件之中。
package java_1215;
import java.io.*;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("请输入要保存的文件名:");
String name=sc.nextLine();
BufferedReader br=null;//先初始化一个读取类型的对象
BufferedWriter bw=null;//初始化一个写入类型的对象
System.out.println("请输入要保存文件的内容(输入 break 结束):");
br=new BufferedReader(new InputStreamReader(System.in));//循环写入读取内容
try {
bw=new BufferedWriter(new FileWriter("c:\\"+name+".txt"));//将相对路径进行拼接
} catch (IOException e) {
e.printStackTrace();
}
String str="";//设置一个值重复接收缓冲区的内容
try {
while ((str=br.readLine())!=null){//读取后进行判断,在用户自主结束之前课一直循环
if (str.equals("break")) break;//防止死循环
bw.write(str);//每次循环写入变量中的内容
bw.newLine();//换下一行与读取的内容保持一致
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
br.close();//使用后关闭流,并让其自动调用 flust方法
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.创建一个类Topic,运行后在控制台输入y可以创建一个A.txt文档到D盘 (输入其他字符无效,并重新输入),然后当你每次在控制台输入的字符串按下回车键后都会输出到A.txt文档中并且换行(如果输入end则结束输出否则继续执行输出),并有如下效果:
这道题前一道流程大体一致。不同的地方我加入了注释。
package java_1215;
import java.io.*;
import java.util.Scanner;
public class Topic {
public static void main(String[] args) {
BufferedReader br=null;
BufferedWriter bw=null;
File f=new File("c:\\A.txt");
Scanner sc=new Scanner(System.in);
String tf;
do {
//加入循环判断
System.out.println("输入y创建文档");
tf=sc.next();
}while (!tf.equals("y"));
try {
//如果检测当前位置已有文件则直接退出程序,防止更改
if (!f.createNewFile()){
System.out.println("当前位置已存在同名文件,创建失败!");
System.exit(0);
}
System.out.println("输入文本内容(输入 end 结束)");
br=new BufferedReader(new InputStreamReader(System.in));
bw=new BufferedWriter(new FileWriter(f));
} catch (IOException e) {
e.printStackTrace();
}
String str="";
try {
while ((str=br.readLine()) != null) {
bw.write(str);
bw.newLine();
if ("end".equals(str)) break;
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
br.close();bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}