IO流简单的创建、读取、写入文件的操作
java的IO是指针对对文件系统、用户输入、输出一系列操作的一套处理类,比如文件读取或者文件保存到磁盘都有Input输入和Output输出,在Java中用流来处理。流的概念和水流一样,有发源地,有目的地,从发源地流向目的地,文件的读取也一样,从磁盘读到内存会产生输入流,从内存保存到磁盘会产生输出流。
这里我只讲一点简单的创建目录,创建文件,读取文件内容,写入文件内容。
创建目录、文件
首先创建一个java Project,然后创建一个class,写好main方法。
然后我们就可以先定义一个文件的目录,比如:File file=new File(“d:/abc”);这里的双引号里面的路径是你自己随便改的,里面的文件名也可以改为你想要创建的,然后需要加一个判断,if(!file.exists())判断这个目录是否已经存在,如果没有存在就创建file.mkdir();
完整的代码应该是
File file=new File("d:/abc");
if(!file.exists()){
file.mkdir();
}
同理,如果想要创建文件和上面一样,这里直接挂出代码:
File file=new File("d:/abc.txt");
//判断文件是否存在
if(!file.exists()){
//创建文件
file.createNewFile();
}
用FileReader读取文件
FileReader是一个简单的读取文件的操作,
首先你需要读取声明文件的字符流,
FileReader fr=new FileReader(“d:/abc.txt”);这就是你读取文件的路径,
然后设置一个缓冲,这个缓冲就是你一次读取多少个字节
char[] buf=new char[1];这里做测试我就让他读取一个字节
这个时候就要初始化一个变量来存放读取的内容:
String text="";
变量声明完毕就要循环读取文件里面的内容了
while(fr.read(buf)!=-1){
text+=new String(buf);
}这里就是循环读取,如果读取到最后缓冲中没有内容,那就会返回一个-1,如果读取到就直接转换字符串拼接。
然后就要输出读取的内容了,这里输出到控制台
System.out.println(text);
这其中会涉及到异常,我这里直接try catch,下面贴上完整代码:
try {
//声明读文件的字符流
FileReader fr=new FileReader("d:/abc.txt");
//设置一个缓冲
char[] buf=new char[1];
//初始化一个字符串变量来存放从文本读取的内容
String text="";
//循环读取文件内容,每次读4个字节,如果缓冲中没有读到新数据,返回-1,
//如果读取到,则从缓冲中转换字符串拼接
while(fr.read(buf)!=-1){
text+=new String(buf);
}
//输出结果
System.out.println(text);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
用PrintWriter写入文件
这里和上面的流程差不太多,
首先,创建一个字符输出流对象
PrintWriter pw=new PrintWriter(“d:/abc.txt”);
然后需要你声明你要写入的内容,这里声明一个字符串
String text = “这是我写入的文字”;
这里我直接给的指定的文字,我们可以用Scanner在控制台输入写入的文字。只需要把引号后面的换成你的变量就可以了,
然后我们需要刷新流和关闭流,不然你会发现那个文件里面没有东西,
pw.flush();
pw.close();
这里你会发现你创建字符输出流对象的时候如果你后面的文件名你的路径里面没有的话他会自动创建一个文件,省了你创建文件的步骤。
这里也会涉及异常,我这里还是直接try catch,下面贴出完整代码:
// 写入文件
public static void main(String[] args) {
try {
//创建一个字符输出流对象
PrintWriter pw=new PrintWriter("d:/PrintWriterText.txt");
//创建Scanner控制台输入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要写入的文字:");
//控制台输入
String text = sc.next();
//输出文字到文件中
pw.print(text);
//刷新流
pw.flush();
//关闭流
pw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
这个代码是我用scanner在控制台输入写的。
最后你会发现用这个PrintWriter这个写法写入文件,里面的内容会被替换,每执行一次就会被替换一次,这个要怎么解决???
这个就要用到BufferedWriter这个了,它可以追加写入:
// 写入文件
public static void main(String[] args) {
try {
File file = new File("d:/BufferedWriter.txt");
Writer fw = new FileWriter(file, true);
// 创建一个字符输出流对象
BufferedWriter pw = new BufferedWriter(fw);
// 创建Scanner控制台输入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要写入的文字:");
// 控制台输入
String text = sc.next();
// 输出文字到文件中
pw.write(text);
// 刷新流
pw.flush();
// 关闭流
pw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
运行一次输入后,查看文件里面的内容,再次运行再查看就会发现已经追加写入而不是替换了。
如果说需要换行操作的话只需要直接pw.write("这是第1行\r\n这是第2行");
在想要实现换行的地方加入\r\n就可以了。