程序app1正在对file1写数据,怎么判断它已经写完?                                                                                                             

解决方案 »

  1.   

    这种问题最简单的解决方式就是程序自己判断,可以给外部提供一个可访问的boolean字段,程序写完的时候boolean字段返回true就好了
      

  2.   

     File file=new File("d:/yl.JPG");
      File file2=new File("d:/yll.JPG");
      
      FileInputStream fio=null;
      FileOutputStream fot=null;
      ImageIcon ii=null;
      try {
           fio=new FileInputStream(file);
           fot=new FileOutputStream(file2);
           byte [] io1=new byte[2048];
           int reads=0;
           
           while((reads=fio.read(io1, 0, 2048))>=0)
           {        
            System.out.println(reads+"======");
            fot.write(io1,0,reads);       
           }
           fio.close();
           fot.close();
           
       
      } catch (FileNotFoundException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
    ----------------自己好好看吧----------
      

  3.   

    感谢大家的积极讨论.有
    现在的主要问题是对file1进行操作的进程是不可控的,只能被动的去偿试判断file1的状态.
    而这种方法我没有,如果试用异常判断也不好使.
      

  4.   

    但是如果文件可以手动修改呢?
    如果正常写数据时出现异常(不可控的异常如断电等等),那么你的外部提供一个可访问的boolean字段还可靠吗?
      

  5.   

    在写文件之前定义一个boolean型的变量,初始化为false
    只有在正常写完文件后,才置为true
    最后把这个boolean值返回那末去判断这个变量是true还是false便可以知道是否正常写完小女子才疏学浅,胡言乱语几句,如有不妥之处,还望见谅。
      

  6.   


    恩. 这是一个很好的办法.
    但是现在我无法控制app1,所以没有办法定义bollean来确定它是否已经写完.
      

  7.   

    可能你无法修改写文件的那个类。或者说无法访问这样的话,如果知道要写的源文件的大小
    然后再去和写出来的文件大小比较一下
    是否就可以知道文件被正常写完了吧io包里的file类有个方法是
    length(),返回long型的文件长度
    是否可以实现呢
      

  8.   

    File类下方法
    boolean canRead() 
              测试应用程序是否可以读取此抽象路径名表示的文件。 
    boolean canWrite() 
              测试应用程序是否可以修改此抽象路径名表示的文件。 
      

  9.   


    经过如下测试,证明
    1.即便是没有被写完的文件,调用canRead,canWrite,delete的结果都为true
    所以通过这种无法知道楼主说的文件是否被正常写完测试:
    1.写一个做成5G文本文件的程序
    2.运行该程序,生成文件
    3.中间把java.exe这个进程杀掉
    4.再写一段代码测试对于刚才做成的文件canRead,canWrite方法的结果
    5.结果都是true
    注:甚至都可以正常执行delete()方法,把文件删掉。