黑马程序员技术交流社区

标题: 文件I/O [打印本页]

作者: 吴新    时间: 2012-11-25 17:08
标题: 文件I/O
实现复制和重命名文件,不关闭复制时候的fileintputstream和fileoutputstream流情况下,运行程序的时候复制成功了却不能重命名,求解!!!(重命名没有用到这俩个流啊)D:\QQ截图20121125170636.png
作者: 罗忠文    时间: 2012-11-25 17:11
File类:主要提供了对平台磁盘上文件的操作,一些参考资料上也说这个类是与流无关的。里面的方法很简单,直接查文档就可以了。注意mkdirs方法,可以创建多层目录,还有一个length属性,下面创建byte[]的length使用它就可以。

FileInputStream 类:提供了对文件读取流的操作。由于InputStream,OutputStream是针对字节流的,所以读取文件以前先要定义byte[],然后把文件流读取到byte[]里面。

FileOutputStream类:文件输出流操作。

不管是FileInputStream还是FileOutputStream,流已经打开是不会自动关闭的,所以一定要使用手动关闭流。方法是close();

package TestIo;
import java.io.FileInputStream;
import java.io.File;
import java.io.FileOutputStream;
public class TestFileInputStream {

/**
  * @param args
  */
public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  File f = new File("d:\\temp\\read.txt");
  FileInputStream fis = new FileInputStream(f);
  
  byte[] b = new byte[(int)f.length()];
  fis.read(b);
  
  
  for(int i=0;i<b.length;i++)
  {
   System.out.print(b[i]);
  }
  
  String bb = new String(b);
  System.out.println(bb);
  boolean a = true;
  File ff = new File("d:\\temp\\newread2.txt");
  FileOutputStream fos = new FileOutputStream(ff,a);
  fos.write(b);
  String abc = "abc";
  byte[] ab = abc.getBytes();
  fos.write(ab);
  fis.close();
  fos.close();
}
}
作者: 吴新    时间: 2012-11-25 17:17
罗忠文 发表于 2012-11-25 17:11
File类:主要提供了对平台磁盘上文件的操作,一些参考资料上也说这个类是与流无关的。里面的方法很简单,直 ...

不关闭的话都会影响哪些操作呢?
作者: 罗忠文    时间: 2012-11-25 17:43
不关闭的话你的机器很变得很慢的。因为不关闭流,它占得内存越来越大,最后死机
作者: 殷士剑    时间: 2012-11-25 20:02
你观察的很仔细,确实是这样,下面是我实验代码:
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;


  6. public class Test10 {

  7. /**
  8. * 实现复制和重命名文件,不关闭复制时候的fileintputstream和
  9. * fileoutputstream流情况下,运行程序的时候复制成功了却不能重命名,求解!!!
  10. * (重命名没有用到这俩个流啊)D:\QQ截图20121125170636.png

  11. */
  12. public static void main(String[] args) {
  13. // TODO Auto-generated method stub
  14. File source = new File("E:\\黑马程序员javaEE-Android学习路线图(请使用IE打开).mht");
  15. File dest = new File("E:\\test\\黑马程序员javaEE-Android学习路线图(请使用IE打开).mht");
  16. //拷贝
  17. copy(source, dest);
  18. //重命名
  19. File source1 = new File("E:\\demo\\黑马程序员javaEE-Android学习路线图(请使用IE打开).mht");
  20. System.out.println(renameTo(dest, source1));

  21. }
  22. public static boolean renameTo(File file,File dest) {
  23. return file.renameTo(dest);
  24. }
  25. public static void copy(File source,File dest) {

  26. BufferedInputStream inputfile = null;
  27. BufferedOutputStream outputfile = null;
  28. try {
  29. inputfile = new BufferedInputStream(new FileInputStream(source));
  30. outputfile = new BufferedOutputStream(new FileOutputStream(dest));
  31. byte[] buffer = new byte[1024];
  32. int length = 0;
  33. while((length = inputfile.read(buffer))!=-1){
  34. outputfile.write(buffer, 0, length);
  35. }
  36. //关闭输入、输出流
  37. inputfile.close();
  38. outputfile.close();

  39. } catch (Exception e) {
  40. // TODO: handle exception
  41. }
  42. }
  43. }
复制代码
其实这个也不难理解:
renameTo有剪切的功能,你认为一个正在被操作的文件可以被剪切吗?!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2