Java中的IO技术(在java中程序如何进行IO操作)

java中的IO技术

什么是IO?
我们写的程序中数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,就已经没有了。那我们就要对数据进行一个持久化存储就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。
当需要把内存中的数据存储到持久化设备(硬盘、光盘、U盘等)上这个动作称为输出(写)Output操作。
当把持久设备上(硬盘、光盘、U盘等)的数据读取到内存中的这个动作称为输入(读)Input操作。
因此我们把这种输入和输出动作在Java中称为IO操作。
在java中给我们了很多类进行IO操作都在的java.IO包中
那我接下来讲的几个类是我们在学java中对IO操作的几个类
1. File类
2. OutputStream类
3. FileOutputStream类
4. InputStream类
5. FileInputStream类
6. Writer类
7. FileWriter类
8. Reader类
9. FileReader类
File类:
File类是Java中来操作系统里的目录,文件,路径的一个类,
它可以把目录,文件,路径封装成一个File类的对象
,我们就可以用这个对象的方法来操作这些了
File类的两个静态常量pathSeparator和separator
1.pathSeparator:
这个常量返回的String类型的";“字符
这个字符是表示的一个目录路径的分隔符在路径后面加上这个分割符就表示这个路径的结束
在win系统下返回的是”;" Linux系统":"
2.pathSeparator:
这个常量返回的是String类型的""
这个字符是表示路径名字的分隔符
是个与系统有关的默认名称分隔符
进行一个名称的分割
在win系统下返回的是"" Linux系统"/"
File的构造方法它有三个构造方法:File(String pathname),File(String pathname,String child),File(File parent,String child)
1.File(String pathname)构造方法:

这个构造方法是传递路径名: 可以写到文件夹,可以写到一个文件
如: c:\abc c:\abc\Demo.java
把一个文件或者文件夹路径封装成File的类型对象

2.File(String pathname,String child)构造方法:

第一个参数传入的是父路径,第二个传入的是子路径
如 😄:这个父路径 D盘下有有多个文件的路径就是它的子路径 这样灵活性会比第一个好很多 我们可以单独的去操作父路径或者子路径

  1. File(File parent,String child)构造方法:

传递路径,第一个参数是传递File类型父路径,字符串子路径
如: File fi = new File(“D:”);可以把这个封装好的父路径对象给它 这样的好处就是我们可以来调用父路径对象的一些方法来操作父路径

File类在系统上创建和删除文件和文件夹功能boolean createNewFile(),boolean mkdirs(),boolean delete()*

1.boolean createNewFile()方法

File创建文件的功能
创建的文件路径和文件名,在File构造方法中给出
在调用这个方法就可以创建出来文件了
如:File fi = new File(“D:\aaa.java”);
fi.createNewFile();
这样程序就会在我们系统的D盘下创建出a.java这个文件了

2.boolean mkdirs()方法

File 创建文件夹的功能
创建的文件路径和文件名,在File构造方法中给出
在调用这个方法就可以创建出来文件夹了
如: File fi = new File(“D:\aaa”);
fi.mkdirs();
这样程序就会在我们系统上D盘下创建出aaa这个文件夹了

3.boolean delete()方法

File 创建文件夹的功能
创建的文件路径和文件名,在File构造方法中给出
在调用这个方法就可以创建出来文件夹了
如: File fi = new File(“D:\aaa”);
fi.mkdirs();
这样程序就会在我们系统上D盘下创建出aaa这个文件夹了

File类的获取功能
1.String getName()
获取到路径中最后的文件名
2.long length()
放回路径中文件的字节数3.
3. String getAbsolutePath() 返回String对象
File getAbsoluteFile() 返回File对象(推荐用这个)
获取文件绝对路径这个方法是一样的只有返回值不一样
4. String getParent() 返回String对象
File getParentFile()返回File对象
获取文件的父路径
5.String[] list() 返回String[]类型数组
获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
如:File fi = new File(“D:”);
String[] s = fi.list();
这里程序就会获取到D盘下的全部文件夹和文件名存储到String数组里
6.File[] listFiles() 返回File[]类型数组
获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
返回的是目录或者文件的全路径
如:File fi = new File(“D:”);
File f = fi.listFiles();
这里程序就会获取到D盘下的全部文件和文件夹的全路径存储到File类型数组里
File类的判断功能
1.boolean exists()判断路径是否存在
判断File构造方法中封装路径是否存在
存在返回true,不存在返回false
2.boolean isDirectory()判断文件夹
判断File构造方法中封装的路径是不是文件夹
如果是文件夹,返回true,不是文件返回false
3.boolean isFile()判断文件
判断File构造方法中封装的路径是不是文件
如果是文件夹,返回true,不是文件返回false
OutputStream类
此类是我们java程序用于对文件进行写入的一个类
OutputStream为抽象类,是输出字节流的所有类的超类。
操作的数据都是字节。我们要用这个类就要用到它的子类对象去使用
OutputStream类的方法
1.write(int b) 写入1个字节信息到文件里
2.write(byte[] b) 写入byte数组字节信息到文件里
3.write(byte[] b,int,int)写入字节数组,int 开始写入的索引, int 写几个
4.close()关闭流对象,释放与次流相关的资源
FileOutputStream类
FileInputStream类是InputStream类的子类我们用InputStream类的方法就要创建这个的对象去使用它的
构造方法:绑定输出的输出目的,要写入文件的路径名,有两个构造方法
一个参数是String类型,一个参数是File类型
注意:
流对象的构造方法,可以创建文件,如果文件存在,直接覆盖
流对象使用步骤:

  1. 创建流子类的对象,绑定数据目的
  2. 调用流对象的方法write写
  3. close释放资源
    这个步骤是所有流对象的使用
    使用流对象写入字符串代码示例:
//创建一个流对象  会在D盘下创建a.txt这个文件,有这个文件就会覆盖
FileOutputStream  f = new FileOutputStream("D:\\a.txt");
    //调用了String 类型的getBytes()方法 把字符串自动转换成编码表格式存储Byte组组
   //这样你好就会写入到a.txt文件里了
    f.write("你好".getBytes());
   //关闭流对象  这个一定要关
   f.close();

FileOutputStream类对文件的续写和换行,不会进行覆盖文件:

在创建这个类的对象的时候给它的构造器第二个参数加上true,在调用方法write方法进行续写 FileOutputStream f= new FileOutputStream(“D:\a.txt”,true);

对要添加的字符串进行换行(换行\r\n):

在你要加的内容前面加上(\r\n)这个符号

InputStream类
这个类是我们在java程序中对文件进行一个读取的一个类
它是个抽象类,是表示输入字节流的所有类的超类,
就是用来读取文件内容信息的
InputStream类的方法
1.int read()读取1个字节信息
2.int read(byte[] b)读取一定量的字节信息,存储到数组中,参数byte[] b 方法read()会在缓冲区里把字节存储到数组里,返回值int:读取到多少个有效的字节
FileInputStream类读取文件
FileInputStream类是InputStream类的子类我们用InputStream类的方法就要创建这个的对象去使用
构造方法:绑定输出的输出目的,要读取出文件的路径名,有两个构造方法
一个参数是String类型,一个参数是File类型
读取出文件里的字符串内容代码

FileInputStream fis = new FileInputStream("d:\\a.txt");
     //创建字节数组
     byte[] b = new byte[1024];
    int len = 0 ;
    //fis.read(b)读取到最后一条数据后会返回-1
    while( (len = fis.read(b)) !=-1){
    //调用String类的构造方法读取出文件的内容 第一个参数数组  第二个参数从数组索引0开始  第三个打印多少个
    System.out.print(new String(b,0,len));
    }
    //关闭流对象   
    fis.close();

Writer类
这个类是我们对文本文件操作的一个类,这个类是所有字符输出流的超类
,主要用于写文件,写文本文件。
这个类的方法名和使用步骤和OutputStream类的方法一样但是它这里有个两新方法要讲一下flush()方法,字符输出流写数据的时候,必须要运行一个方法,刷新方法,不运行这个方法内容是写不进去文件的,
write(String s) 这个方法是可以直接写入字符串到文件里的。
包括构造方法也是一样的这我就不写出来了 嘿嘿嘿!
FileWriter类
这个类我也就不多说太多了哈哈哈看了上面的一个都知道什么意思
这里我就直接用代码示例来演示
使用FileWriter字符流对象对文本文件写入字符串代码示例

//创建一个流对象  会在D盘下创建a.txt这个文件
FileWritef = new FileWrite("D:\\a.txt");
   //这样你好就会写入到a.txt文件里了
    f.write("你好");
    //刷新
    f.Flush();
   //关闭流对象  这个一定要关
   f.close();

Reader类
这个类是我们对文本文件操作的一个类,这个类是所有字符输入流的超类
,主要用于读取文本文件。
FileReader类
这我也就不写啦直接代码示例

FileReader fr = new FileReader("c:\\1.txt");
	//单个读取
    /*int len = 0 ;
    while((len = fr.read())!=-1){
    System.out.print((char)len);
    }*/
    //通过数组读取这个方法效率快 
    char[] ch = new char[1024];
    int len = 0 ;
    while((len = fr.read(ch))!=-1){
    System.out.print(new String(ch,0,len));
     }
     fr.close();

文件过滤器FileFilter接口
File类的获取文件的时候,对文件获取过滤,遍历目录的时候,可以根据需要,只获取满足条件的文件这个接口是没有实现类的我们这里就需要直接做一个实现类
实现类代码示例:

//实现FileFilter接口并实现它的方法accept(File pathname)
public class MyFilter implements FileFilter{

	public boolean accept(File pathname)  {
		/*
		 * pathname 接受到的也是文件的全路径
		 * c:\\demo\\1.txt
		 * 对路径进行判断,如果是java文件,返回true,不是java文件,返回false
		 * 文件的后缀结尾是.java
		 */
		return pathname.getName().endsWith(".java");
       }
}

这样一个简单的过滤器就完成了
使用过滤器的步骤:
1.调用Files类的listFiles(FileFilter filter)这个方法传入FileFilter接口的实现类对象
2.并且会调用到这个实现类的方法accept(File fi)把文件路径传入到这个方法的参数里
3.对传过来的文件路径进行判断
4.如果返回是true listFiles()就会把文件的路径存入到File类型的数组里如果false则不会存入
IO流的异常处理
我们在使用IO流的时候是会发生各种异常的如:文件如果写入失败,或者创建文件失败等等,那我们就需要对这些异常进行处理有两种方式进行处理可以选择使用throws把异常抛给虚拟机这种不建议,我们就要对异常进行一个处理这里我们使用try…catch…finally语句来处理
代码示例:

//try 外面声明变量,try 里面建立对象   
      FileOutputStream fos = null    
      try{
      fos = new FileOutputStream("s:\\a.txt");
      fos.write(100);   
      }catch(IOException ex){
      //打印异常信息
      System.out.println(ex);
     //停下程序,
      throw new RuntimeException("文件写入失败,重试");
      }finally{    
      try{
      //如果为流对象为null才关闭资源
      if(fos!=null)
      fos.close(); 
     }catch(IOException ex){
      throw new RuntimeException("关闭资源失败");
     }
		}

**总结:**小编刚刚学的怎么去写博客哪里如果写的不好的有请见谅,接下来如果有时间我会继续写一下关于java技术的博客。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值