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

D:\jboss-eap-6.4\domain\servers\8080\tmp\vfs\temp\temp5e9f137492dc6baa\content-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

Java 复制一个文件到另外一个目录下的更多相关文章

  1. Java中删除文件、删除目录及目录下所有文件(转)

    原文链接:Java中删除文件.删除目录及目录下所有文件 知识点:File.delete()用于删除“某个文件或者空目录”!所以要删除某个目录及其中的所有文件和子目录,要进行递归删除,具体代码示例如下: ...

  2. java中把文件拷贝到指定目录下最简单几种方法

    java中把文件拷贝到指定目录下最简单几种方法   String savePath = "D:/file";// 文件保存到d盘的file目录下 File savefile = n ...

  3. [Java] 在 jar 文件中读取 resources 目录下的文件

    注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...

  4. Java中删除文件、删除目录及目录下所有文件

    转载自:http://www.cnblogs.com/eczhou/archive/2012/01/16/2323431.html 功能:删除某个目录及目录下的所有子目录和文件 知识点:File.de ...

  5. linux 下怎样查找一个文件夹在哪个目录下?

    如果只显示所在目录的路径: find 目录 -type d -name "查询目录名" -printf "%h\n" 如果同时显示目录名称和所在目录的路径: f ...

  6. 在一个另一个文件中 #include一个**dlg.h文件,会发生dlg的资源ID未定义的错误 :

    1    在一个另一个文件中 #include一个**dlg.h文件,会发生dlg的资源ID未定义的错误 : dlg1.h(23) : error C2065: 'IDD_DIALOG1' : und ...

  7. C# 将引用的DLL文件放到指定的目录下

    原文:C# 将引用的DLL文件放到指定的目录下 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sweety820/article/details/2 ...

  8. 关于DLL文件和EXE文件不在同一目录下的设置【转】

    https://www.cnblogs.com/chaosimple/archive/2012/08/13/2636181.html 关于DLL文件和EXE文件不在同一目录下的设置 在开发程序结束后, ...

  9. Maven项目如何将自定义文件添加到META-INF目录下

    Maven项目如何将自定义文件添加到META-INF目录下 学习了:https://blog.csdn.net/yangjiegreat/article/details/78698655 <bu ...

随机推荐

  1. 【python】Python3 循环语句

    [python]几种常见的循环 注意:如果涉及到程序中print语句中含有%d,%s,那么要在脚本最开始写语句:#coding=utf-8,才能够正常输出想要的数字或者字符串. Python3 循环语 ...

  2. 【spring mvc】application context中【bean】的生命周期

    生命周期过程 主要分为四部分: 一.实例化 1. 当调用者通过 getBean( name )向 容器寻找Bean 时,如果容器注册了org.springframework.beans.factory ...

  3. 当IDENTITY_INSERT设置为OFF时不能向表插入显示值。(源:MSSQLServer,错误码:544)

    错误提示"事务和快照同步时提示:当IDENTITY_INSERT设置为OFF时不能向表插入显示值.(源:MSSQLServer,错误码:544)" 原因:在SQL2008同步时到S ...

  4. python 面向对象编程学习总结

    面向对象是个抽象的东西,概念比较多,下面会一一介绍. 一.类和实例 类(Class)和实例(Instance)是面向对象最重要的概念. 类是指抽象出的模板.实例则是根据类创建出来的具体的“对象”,每个 ...

  5. lua关于参数生命周期的研究

    local num = 123 local str = "abc" local tb ={} 数字和字符串类型的值作为参数传递的时候,是复制值,2个独立的内存地址 table类型的 ...

  6. WebService—CXF—实现接口发布和客户端调用

    (一)接口发布的几种方式 定义接口: @WebService(targetNamespace="http://www.itfad.net/queryUser") public in ...

  7. AtCoder Grand Contest 029 Solution

    A: Solved. 签. #include <bits/stdc++.h> using namespace std; #define ll long long #define N 200 ...

  8. zoj3822

    这题说得是给了一个n*m的棋盘,每天在这个棋盘中放置一个棋子,不能放在之前已经摆放过得地方,求最后使得每行每列都有至少一个棋子的期望天数是多少,这样我们考虑怎么放,放哪里,显然数据大而且不知道状态怎么 ...

  9. C++多线程学习资料参考

    新的C++11语法:<Professional C++>,或<C ++ Primer  Plus>: C++11多线程:<C++ Concurrency in Actio ...

  10. INNODB索引与算法

    在之前的博文中简单提到了索引的分类与索引的可选择性查看:Click HERE 这片博客主要包含内容:索引组织表,索引算法B+树简单介绍 索引组织表 在innodb存储引擎中,表都是根据主键顺序组织存放 ...