• Java筑基31-IO流01-文件&流分类


    目录

    一、文件基础知识

    二、常用的文件操作

    1.创建文件

    2.获取文件信息

    3.目录操作

    三、IO流原理及流的分类

    1. I/O流原理与分类

    2. I/O流体系图

    3.字节流

    4.字符流

    一、文件基础知识

    什么是文件?

    什么是文件流?

    二、常用的文件操作

    1.创建文件

    1. package com.feiyang.basic15_file;
    2. import java.io.File;
    3. import java.io.IOException;
    4. /**
    5. * @author:飞扬
    6. * @公众hao:程序员飞扬
    7. * @description:创建文件
    8. */
    9. public class FileCreate {
    10. public static void main(String[] args) throws IOException {
    11. //方式一:根据路径
    12. File file1 = new File("d:\\new1.txt");
    13. if(file1.createNewFile()){
    14. System.out.println("创建ok~");
    15. }else{
    16. System.out.println("创建失败~");
    17. }
    18. //方式二:根据父目录文件+子路径
    19. File file2 = new File(new File("d:\\"), "new2.txt");
    20. if(file2.createNewFile()){
    21. System.out.println("创建ok~");
    22. }else{
    23. System.out.println("创建失败~");
    24. }
    25. //方式三:根据父目录+子路径
    26. File file3 = new File("d:\\", "new3.txt");
    27. if(file3.createNewFile()){
    28. System.out.println("创建ok~");
    29. }else{
    30. System.out.println("创建失败~");
    31. }
    32. }
    33. }

    2.获取文件信息

    1. package com.feiyang.basic15_file;
    2. import java.io.File;
    3. import java.io.IOException;
    4. import java.text.SimpleDateFormat;
    5. import java.time.format.DateTimeFormatter;
    6. import java.util.Date;
    7. /**
    8. * @author:飞扬
    9. * @公众hao:程序员飞扬
    10. * @description:获取文件信息
    11. */
    12. public class FileInformation {
    13. public static void main(String[] args) throws IOException {
    14. File file = new File("d:\\hello.txt");
    15. //file.createNewFile();//真正的创建文件
    16. System.out.println("文件名==" + file.getName());
    17. System.out.println("文件大小(字节数)==" + file.length()); //只针对文件有效
    18. DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss");
    19. System.out.println("文件最后一次修改时间:" + file.lastModified());
    20. Date date = new Date();
    21. date.setTime(file.lastModified());
    22. String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
    23. System.out.println("文件最后一次修改时间:" + format);
    24. System.out.println("文件绝对路径:" + file.getAbsolutePath());
    25. System.out.println("文件父路径:" + file.getParent());
    26. //判断
    27. System.out.println(file.exists());//是否存在
    28. System.out.println(file.isFile());//是否是文件
    29. System.out.println(file.isDirectory());//是否是目录
    30. }
    31. }

    3.目录操作

    1. package com.feiyang.basic15_file;
    2. import org.junit.jupiter.api.Test;
    3. import java.io.File;
    4. /**
    5. * @author:飞扬
    6. * @公众hao:程序员飞扬
    7. * @description:目录操作
    8. */
    9. public class Directory_ {
    10. public static void main(String[] args) {
    11. }
    12. //判断文件是否存在,存在就删除,否则提示不存在
    13. @Test
    14. public void m1(){
    15. File file = new File("d:\\new1.txt");
    16. if(file.exists()){
    17. if(file.delete()){
    18. System.out.println("文件删除成功~");
    19. }else{
    20. System.out.println("文件删除失败~");
    21. }
    22. }else{
    23. System.out.println("文件不存在~");
    24. }
    25. }
    26. //判断目录d:\demo1是否存在,存在就删除,不存在就提示
    27. //java中,目录也被当作文件
    28. @Test
    29. public void m2(){
    30. File file = new File("d:\\demo1");
    31. if(file.exists()){
    32. if(file.delete()){
    33. System.out.println("删除成功~");
    34. }else{
    35. System.out.println("删除失败~");
    36. }
    37. }else{
    38. System.out.println("该目录不存在~");
    39. }
    40. }
    41. //判断目录是否存在d:\demo\a\b\c,不存在就创建
    42. @Test
    43. public void m3(){
    44. File file = new File("d:\\demo\\a\\b\\c");
    45. if(file.exists()){
    46. System.out.println("该文件已存在");
    47. }else{
    48. boolean mkdirs = file.mkdirs();
    49. if(mkdirs){
    50. System.out.println("多级目录创建成功");
    51. }else{
    52. System.out.println("多级目录创建失败");
    53. }
    54. }
    55. }
    56. }

    三、IO流原理及流的分类

    1. I/O流原理与分类

    2. I/O流体系图

    3.字节流

    1.FileInputStream

    1. /**
    2. * @author:飞扬
    3. * @公众hao:程序员飞扬
    4. * @description:字节输入流(文件 → 程序)
    5. */
    6. public class FileInputStream_ {
    7. public static void main(String[] args){
    8. }
    9. @Test
    10. public void read01(){
    11. FileInputStream fis = null;
    12. try {
    13. fis = new FileInputStream(new File("d:\\new2.txt"));
    14. //从该输入流读取一个字节的数据,如果没有输入可用该方法将阻止
    15. //如果返回-1,表示读取完毕
    16. int read;
    17. while((read = fis.read()) != -1){
    18. System.out.print((char)read);
    19. }
    20. System.out.println("========================");
    21. //
    22. byte[] b = new byte[1024 * 2];
    23. int len;
    24. while((len = fis.read(b)) != -1){
    25. System.out.print(new String(b,0,len));
    26. }
    27. } catch (IOException e) {
    28. e.printStackTrace();
    29. }finally {
    30. try {
    31. fis.close();
    32. } catch (IOException e) {
    33. e.printStackTrace();
    34. }
    35. }
    36. }
    37. @Test
    38. public void read02() {
    39. FileInputStream fis = null;
    40. try {
    41. fis = new FileInputStream(new File("d:\\new2.txt"));
    42. byte[] b = new byte[1024]; //一次读取1024个字节
    43. int len;
    44. //从输入流读取最多b.length个字节的数据到字节数组
    45. while((len = fis.read(b)) != -1){
    46. System.out.print(new String(b,0,len));
    47. }
    48. } catch (IOException e) {
    49. e.printStackTrace();
    50. }finally {
    51. try {
    52. fis.close();
    53. } catch (IOException e) {
    54. e.printStackTrace();
    55. }
    56. }
    57. }
    58. }

    2.FileOutPutStream

    1. import org.junit.jupiter.api.Test;
    2. import java.io.FileOutputStream;
    3. import java.io.IOException;
    4. /**
    5. * @author:飞扬
    6. * @公众hao:程序员飞扬
    7. * @description: 字节输出流
    8. */
    9. public class FileOutPutStream_ {
    10. @Test
    11. public void method1() throws IOException {
    12. String file = "d:\\a.txt";
    13. FileOutputStream ost = null;
    14. try {
    15. //ost = new FileOutputStream(file);//会覆盖
    16. ost = new FileOutputStream(file,true);//不会会覆盖
    17. //写入一个字节
    18. //ost.write('E');
    19. //写入多个字符
    20. String s = "Hello World!";
    21. byte[] bytes = s.getBytes();
    22. //ost.write(bytes);
    23. //写入指定范围的字符串
    24. ost.write(bytes,0,5);
    25. } catch (IOException e) {
    26. e.printStackTrace();
    27. }finally {
    28. try{
    29. ost.close();
    30. }catch (Exception ex){
    31. ex.printStackTrace();
    32. }
    33. }
    34. }
    35. }

    3.文件拷贝

    1. import java.io.FileInputStream;
    2. import java.io.FileOutputStream;
    3. import java.io.IOException;
    4. /**
    5. * @author:飞扬
    6. * @公众hao:程序员飞扬
    7. * @description: 文件拷贝
    8. */
    9. public class FileCopy {
    10. public static void main(String[] args) {
    11. //完成思路:先读再写
    12. FileInputStream fis;
    13. FileOutputStream fos;
    14. String srcFile = "d:\\aaa.jpg";
    15. String destFile = "d:\\aaa2.jpg";
    16. byte[] bytes = new byte[1024];
    17. try {
    18. fis = new FileInputStream(srcFile);
    19. fos = new FileOutputStream(destFile);
    20. int readLen = 0;
    21. while((readLen = fis.read(bytes)) != -1){
    22. fos.write(bytes,0,readLen);
    23. }
    24. System.out.println("拷贝ok~");
    25. } catch (IOException e) {
    26. e.printStackTrace();
    27. }
    28. }
    29. }

    4.字符流

    1.FileReader

    1. package com.feiyang.basic15_file;
    2. import java.io.FileReader;
    3. import java.io.IOException;
    4. /**
    5. * @author:飞扬
    6. * @公众hao:程序员飞扬
    7. * @description: 字符输入流
    8. */
    9. public class FileReader_ {
    10. public static void main(String[] args) {
    11. String filePath = "d:\\hello.txt";
    12. FileReader fileReader = null;
    13. int data = 0;
    14. try {
    15. //创建流对象
    16. fileReader = new FileReader(filePath);
    17. //读取,每次读取单个字符,如果文件到末尾返回-1
    18. /*while((data=fileReader.read()) != -1){
    19. System.out.print((char)data);
    20. }*/
    21. //批量读取多个字符到char[],返回读到的实际字符个数
    22. char[] chars = new char[5];
    23. while((data=fileReader.read(chars)) != -1){
    24. System.out.print(new String(chars,0,data));
    25. }
    26. }catch (IOException e){
    27. e.printStackTrace();
    28. }finally {
    29. if(fileReader != null){
    30. try {
    31. fileReader.close();
    32. } catch (IOException e) {
    33. e.printStackTrace();
    34. }
    35. }
    36. }
    37. }
    38. }

    2.FileWriter

    1. package com.feiyang.basic15_file;
    2. import java.io.FileWriter;
    3. import java.io.IOException;
    4. /**
    5. * @author:飞扬
    6. * @公众hao:程序员飞扬
    7. * @description: 字符输出流
    8. */
    9. public class FileWriter_ {
    10. public static void main(String[] args) {
    11. String filePath = "d:\\note.txt";
    12. FileWriter fileWriter = null;
    13. try {
    14. fileWriter = new FileWriter(filePath,true);//追加模式
    15. fileWriter.write('H'); //写入单个字符
    16. char[] chars = {'飞','扬'};
    17. fileWriter.write(chars); //写入字符数组
    18. fileWriter.write("公众号:".toCharArray(),0,4); //写入指定长度的字符数组
    19. fileWriter.write("程序员飞扬"); //写入整个字符串
    20. fileWriter.write("java全栈知识体系公众号",0,13); //写入指定长度的字符串
    21. } catch (IOException e) {
    22. e.printStackTrace();
    23. }finally {
    24. try {
    25. if(fileWriter != null){
    26. //fileWriter.flush();
    27. fileWriter.close(); //切记一定要刷新或关闭流,否则无法写入文件
    28. }
    29. } catch (IOException e) {
    30. e.printStackTrace();
    31. }
    32. }
    33. }
    34. }

  • 相关阅读:
    java中json转list和map的嵌套
    一种曲线递增策略的自适应粒子群算法研究-附代码
    C#使用OpenCv(OpenCVSharp)图像轮廓凸包检测与绘制
    设计模式-备忘录模式(Memento Pattern)
    运维监控背景信息
    事件捕获和时间冒泡,event.stopPropagation();event.preventDefault();和js jquery取消事件
    python argparse 库
    计算机毕业设计Java瀚绅睿茨二人二轮车租赁管理(源码+系统+mysql数据库+lw文档)
    linux 学习笔记
    Maven项目的目录结构
  • 原文地址:https://blog.csdn.net/lu_xin5056/article/details/126833817