欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Java文件和IO流的使用

时间:2023-08-10
文章目录

文件

文件file 相关方法使用Demo 通过递归 查找c盘下所有文件 File和流流

输入流和输出流字节流和字符流输入流 Demo: 读取指定文件内容输出流

输入流demo1:用字节流完成输出流 。在文件中写入一个字符。通过write方法把内容写到流管道输入流demo2:用字符流完成输入流 。在文件中写入字符串输入流demo3:视频拷贝。利用缓存提高效率 文件

File类并不是代表文件,它可以代表特定文件的名称,也可以是某个目录。

这里的名称就是路径,因为在Java中“”被用作转义字符,所有Windows风格的路径最好用"“来分隔,如:“c:temptest.txt”, 但在Linux下此路径就应该这样写: c:/temp/test.txt”。
如果要考虑跨平台,则最好这样写:
“c:”+File.separator+“temp” +File.separator+“文件名”

文件file 相关方法使用

package com.wdy.file;import java.io.File;import java.util.Date;public class FileDemo {public static void main(String[] args) throws Exception {File file = new File("D:\abc.txt"); //创建文件对象file.createNewFile(); //该路径不存在的同名文件情况下,创建文件System.out.println("是否是文件夹: " +file.isDirectory());System.out.println("是否是文件: " +file.isFile());System.out.println(file.isHidden()); //文件是否隐藏System.out.println(new Date(file.lastModified()));//文件创建时间System.out.println(file.getTotalSpace()/1024/1024/1024+"G");// 字节/kb/M/G 计算硬盘总空间System.out.println(file.getFreeSpace()/1024/1024/1024+"G");//计算硬盘剩余空间File f = new File("C:\");File[] fs = f.listFiles(); //.listFiles() 获取C盘下所有的文件和文件夹,放入数组for (File f2 : fs) {System.out.println(f2.getName()); //遍历显示}//file.delete(); //删除文件}}


Demo 通过递归 查找c盘下所有文件

package com.wdy.file;import java.io.File;public class FileDemo02 {static int count = 0;public static void main(String[] args) {File file = new File("C:\");find(file);System.out.println("图片: " + count);}public static void find(File file) {if(file!=null && file.isFile()) {//如果是文件 递归终止条件String fileName = file.getName();//if(fileName.endsWith(".jpg")||fileName.endsWith(".png")) { //.endswith() 查找 .jpg 和 、png//count++;//System.out.println(fileName);//}return;}File[] fs = file.listFiles(); //查找C盘下的所有文件夹if(fs!=null) {for (File f : fs) {find(f); //对每个子文件夹进行 递归调用}}}}


File和流

File类关心得是磁盘上存储的文件,而流是指程序运行中数据的通道信道,流类关心的是文件的内容。

流 输入流和输出流

输入流就是从外部读取数据进入程序,然后由程序处理。通过read方法把内容读到流管道。InputStream类是所有输入流类的基类。InputStream类是抽线类,没有构造方法,一般使用它的子类来实现读入,如FileInputStream类、

输出流是以程序为起点输出数据。通过write方法把内容写到流管道。OutputStream类是所有输出流的基类。也是一个抽象类。

字节流和字符流

字节流以字节的形式来处理数据字符流以字符的形式来处理数据 输入流 Demo: 读取指定文件内容

获取当前文件位置的方法:
1)右击java文件 ——Properties——查看绝对路径
2)利用线程获取bin文件夹位置,再进行修改

用字节流读取出现乱码(中文乱码)如何解决?
1)采用包装模式:字节流——>字符流
InputStreamReader
2)直接用字符流读取 Reader类

try…with…resource 捕获异常 :
使用条件:出现异常的类实现了Closeable接口
如Reader类实现了Closeable接口

package com.wdy.stream;import java.io.FileInputStream;import java.io.FileReader;import java.io.InputStream;import java.io.InputStreamReader;import java.nio.charset.Charset;public class InputStreamDemo {public static void main(String[] args) {String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();//当前线程。类加载器。从根目录开始获取 bin。显示为字符串的形式System.out.println(path);path =path.substring(0, path.length()-4); //截取字符串System.out.println(path);String fileName = path+"src/io/file/FileDemo02.java"; //拼接字符串 尾部// 包装模式// InputStreamReader(类) 把字节流(FileInputStream)包装成字符流 否则中文会乱码 try(InputStreamReader r = new InputStreamReader(new FileInputStream(fileName));){ int n = 0; while((n=r.read())!=-1) { System.out.print((char)n); } }catch(Exception e) { e.printStackTrace(); //打印异常 }}}

用字符流读取:Reader

package com.wdy.stream;import java.io.FileReader;import java.io.Reader;public class ReaderDemo {public static void main(String[] args) {String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();System.out.println(path);path =path.substring(0, path.length()-4);System.out.println(path);String fileName = path+"src/io/file/FileDemo02.java";//读取字符流try(Reader in = new FileReader(fileName);){//try...with...resource 捕获异常 使用条件:Reader类型实现了Closeable接口int n = 0;while((n = in.read())!=-1){System.out.print((char)n);}}catch(Exception e) {e.printStackTrace();}}}

输出流

1)输出流:即在指定文件写内容的操作方法

2)OutputStream底层实现了Closeable接口 (关闭的接口) 、flushable接口(缓存的接口)

3)提高拷贝效率的方式 :
缓存:创建1024字节大小的数组中。讲数据先读入数组(缓存)中

4).close() 底层包含了flush()方法,flush()方法可以省略

5)音视频拷贝使用字节流

输入流demo1:用字节流完成输出流 。在文件中写入一个字符。通过write方法把内容写到流管道

package com.wdy.stream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.OutputStream;public class OutStreamDemo {public static void main(String[] args) throws Exception {//try(OutputStream out = new FileOutputStream("D:\out.txt", false);){//out.write('a');////}catch (Exception e) {//e.printStackTrace();//}OutputStream out = new FileOutputStream("D:\out.txt", false);out.write('c');out.flush();out.close();}}

输入流demo2:用字符流完成输入流 。在文件中写入字符串

package com.wdy.stream;import java.io.FileWriter;import java.io.IOException;import java.io.Writer;public class WriterDemo {public static void main(String[] args) throws Exception {Writer out = new FileWriter("D:\outw.txt", true); //true和false false取决于是在文件中直接写入字符流 true是再文件内容尾部追加out.write("test..."); //out.flush();//字符流相当于包装的字节流。字符流写入文件需要一个缓存时间out.close();//关闭 close()底层调用了flush()方法,flush可以神略}}

输入流demo3:视频拷贝。利用缓存提高效率

package com.wdy.stream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;public class CopyDemo {public static void main(String[] args) throws Exception {InputStream in = new FileInputStream("D:\dyit\20220202\video\IO-File.mp4");//输入流 OutputStream out = new FileOutputStream("D:\copyMovie.mp4"); //输出流byte[] buffer = new byte[1024];//缓存概念 创建一个缓存数组long s1 = System.currentTimeMillis();// 拷贝时间while(in.read(buffer)!=-1) { // .read() 将字符读入数组中的某一部分。 out.write(buffer); //写入缓存(数组)中}long s2 = System.currentTimeMillis();System.out.println("拷贝耗时: " + (s2-s1));out.close();//关闭 已经包含flush()in.close();} }

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。