IO输入输出

  public static void main(String[] args) {
  File f= new File("c:\\test.txt");
  if(f.exists()){

//delete方法删除由File对象的路径所表示的磁盘文件或目录,如果删除的对象是目录,该目录中的内容必须为空,否则无法删除

 
   f.delete();

  }else{
   try {
    f.createNewFile();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  System.out.println(f.getName());
  System.out.println(f.getPath());

 }

}

创建一个文件对象后就可以通过该对象的方法得到文件的一些属性,但是不能访问文件的内容

RandomAccessFile类

RandomAccessFile类支持“随机访问”方式,可以跳转到文件的任意位置处读写数据。因为该对象类有个位置指示器,指向当前读写处的位置,我们可以移动这个指示器到新的位置从而实现“随机”的功能。不过该类只能操作文件,不能访问IO设备。

 节点流

    什么是节点流呢?程序用于直接操作目标设备所对应的类叫节点流类。

    程序可以从中连续读取字节的对象叫输入流,用InputStream类完成。程序能向其中连续写入字节的对象叫输出流,用OutputStream类完成。

刚学的时候,还真没有搞清楚从一个文件中读取数据是用InputStream,因为感觉从文件中读出,读出嘛那肯定是Out噻。后来才知道是参考对象弄错了,此时的讲习入读出是相对流对象而言的,相对流对象从文件中读数据回来,当然就是读入也就是InputStream.这两个类只是抽象类,程序中用到的都是它们的子类对象 !

      复习到这里时,看到了一个很重要的知识点,就是缓冲技术:

      计算机访问外部设备,要比直接访问内存慢得多,如果直接向硬盘写数据,那么CPU就要花费更多的时间等待外部设备的响应,所以可以在内存中开辟一块空间用于存write方法写出的数据,当缓冲区满了时再一次性向外部设备写和入,这样就提高了CPU的利用率,还有就是可以回滚数据,因为数据还在缓冲区中。在开发的维护中程序出了问题一定要考虑到缓冲的问题,不然有时会找不到问题的原因在何处!

FileInputStream 与FileOutputStream

   这两个类可以说是用得最多的,当然是我在程序中用得比较频繁的。

  File f = new File("c:\\test.txt");
  try {
   //相当于用一根管子连接上文件f然后向管子中加入想写的数据
   FileOutputStream out = new FileOutputStream(f);
   out.write("hello hema".getBytes());

  //此处非常重要,流必须关闭,否则会内存泄漏,刚学的时候我就经常没有这行代码,老是忘写!

   out.close();
  } catch (Exception e) {
   System.out.println(e.getMessage());
  }

  byte[] buf;
  int len;
  try {
   FileInputStream in = new FileInputStream(f);
   //建立一个中转空间,将读来的数据暂存在此处
   buf = new byte[1024];
   len = in.read(buf);

  in.close();
   System.out.println(new String(buf, 0, len));
  } catch (Exception e) {
   System.out.println(e.getMessage());
  }
  }

对程序员来说,代码是最敏感的了,文字很繁锁,代码一看就知道怎么用了!

Reader与Writer

       InputSteam与OutputStream是用来处理字节的,在处理字符文本时不太方便,需要编写额外的程序代码。于是便出现了Reader和Writer专门用于处理字符的类, 当然这两个都是抽象类,还是得用它们的子类对象才行。

FileWriter和FileWriter的编程和FileInputStream,FileOutputStream差不多,惟一不同就是FileWriter的write方法中可以直接是字符串

PipedInputStream 与PipeOutStream

   这两个类主要是用于完成线程之间的通信,一个线程的PipedInputStream对象能够从另一个线程的PipedOutputStream对象中读取数据 ,通过PipedOutputStream的connect方法就可读取。

ByteArrayInputStream与ByteAttayOutputStream

   ByteArrayInputStream有两个构造函数,每个构造函数都要一个字节数组作为数据源。

   ByteArrayInputStream(byte[] buf)

  ByteArrayInputStream(byte[] buf,int offset.int length)  buf中第offset处开始length个元素作为数据源

  ByteArrayOnputStream()创建一个32字节的缓冲区

  ByteArrayOnputStream(int)根据指定参数指定创建的缓冲区的大小,且可以在数据过大是自动增长

  这两个流的作用在于,用IO流的方式来完成对字节数组内容的读写。

  通过这两个类可以实现内存虚拟文件的功能,从而大提高效率。

  记得张孝祥老师在讲HttpServer和HttpClient的视频中就用到了这个类,感觉很有用处!

过滤流与包装类

程序不直接通过节点流操作目标,而是通过一个中间对象也就是包装流连接上节点流去操作目标。

BufferedInputStream,BufferedOutputStream:对IO进行缓冲可以优化性能。缓冲流为IO流增加了内存缓冲区。这样有两大好处:

     允许java的IO一次不只操作一个字节,有了缓冲区,可以执行skip mark reset方法

DataInputStream DataOutputStream:这两个类提供了可以读写各种基本数据类型数据的各种方法,这样可使代码简化。

于是可以采用这种模式:程序-->DataOutputStream-->BufferedOutputStream-->FileOutputStream-->文件-->FileInputStream-->BufferedInputStream-->DataInputStream-->程序

    此处值得说的是:关闭上层流对象,会自动关闭底层的流对象 即关闭DataOutputStream和DataInputStream对象

ObjectInputStream 与ObjectOutputStream:这两个类用于存储和读取对象的输入输出流类。只要对象实现了Serializable接口,就可以用该类把一个对象写入到文件中。

字符集:计算机中的数据都是用数字来表示的,采用不同的字符集会出现不同的显示效果,实际上就是采用查表的方法,用GBK保存的文件用ISO8859-1的字符集打开就会是乱码,在用struts 时就会有中文乱码的情况,因为它的默认编码是ISO8859-1而我们的中文在这个字符集中就不再是中文了。UTF-8编码便可以解决码表不同的问题!

【6层】一字型框架办公楼(含建筑结构图、计算书) 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值