zoukankan      html  css  js  c++  java
  • Java 复制一个文件到另外一个目录下

    因为项目部署在jboss上面,在上传一些图片的时候,把他上传到当前项目的下,比如:(这里是以Windows服务器为例的,当然linux也是一样的)

    D:jboss-eap-6.4domainservers8080 mpvfs emptemp5e9f137492dc6baacontent-295f90957d15c1af

    这个路径当你再次部署jboss的时候,他就会把后面红色标记的目录给重新生成一下且存在这些目录下的文件都会被删掉,所以当时想把图片利用:

    String savePath = request.getSession().getServletContext().getRealPath("");

    得到当前项目所在的物理磁盘路径,存储到其中的方法是不好实现的。之后有想到了在服务器上面部属个ftp,把图片什么都存储到ftp上面,然后把ftp的存储路径放到数据库中,这个方法是可行的,但是有的时候ftp服务器跟程序的应用服务器是分开的,所以当ftp服务器当机的时候,图片就存储不到了。然后就想到了把图片存储到jboss的根目录下的某个文件夹下,

      String tempPath = System.getProperty("user.dir");

    当成一个中转站,如果重新部署了war包,使得图片没有了,再从中转的目录中复制过来,主要的代码如下:

            String saveName = dto.getDiplomatIdentity();  //从数据库中得到存储的相对路径
                String tempPath = System.getProperty("user.dir");
                String savePath = request.getSession().getServletContext().getRealPath("");
    
                //中转站路径中的文件
                File tempPathFile = new File(tempPath + "\" + saveName);
                //项目的相对路径(目录)
                File savePathFile = new File(savePath + "\resources\acs_imgs\shipper\");
                //如果当前项目对于的相对路径下没有对应的图片。就从中转目录下拷贝一份,有的话就跳过此方法
                // 如果中转目录下都没有文件,那么直接跳过。
                File imgFile = new File(savePath + "\" + saveName);
    
                if (!imgFile.exists()) {
                    if (tempPathFile.exists()) {
                        //当前项目的相对路径没有对应的目录,新建
                        if (!savePathFile.exists()) {
                            savePathFile.mkdirs();
                        }
                        //得到中转目录的 文件流
                        FileInputStream fis = new FileInputStream(tempPath + "\" + saveName);
                        //输出到 当前目录下
                        FileOutputStream fos = new FileOutputStream(savePath + "\" + saveName);
                        int len = 0;
                        byte[] buf = new byte[1024];
                        while ((len = fis.read(buf)) != -1) {
                            fos.write(buf, 0, len);
                        }
                        fis.close();
                        fos.close();
                    }
                }

     当然File文件的操作,有个File#renameTo(File)方法,这个方法也是可行的,但是有的时候,他会出现小小的问题即:

    不同盘符的分区格式不同,之间互相用File#renameTo(File)方法的时候,有可能会不成功的,具体看 http://xiaoych.iteye.com/blog/149328   和 http://www.iteye.com/topic/149328

  • 相关阅读:
    逐点分析,这样做Web端性能测试
    如何完成大数据测试-从功能测试角度分析
    自动化测试和手动测试利弊
    (一)SQL注入漏洞测试的方式总结
    如何设计一个完整的测试用例
    测试与开发、产品、上下级沟通、
    黑盒测试用例设计总结
    改变测试思路,你的性能测试才能更值钱!(下)
    20190923-03Linux时间日期类 000 011
    20190923-02Linux文件目录类 000 010
  • 原文地址:https://www.cnblogs.com/eoooxy/p/6554336.html
Copyright © 2011-2022 走看看