我的業務需求是兩個不同的web程序放在不同的服務器上,web程序A要訪問到web程序B上傳上來的文件,所以用到了這一個IO讀取文件的接口
JAVA代碼(排版有點問題 已經盡力補救了(:3_ヽ)_)
-
import java.io.BufferedInputStream;
-
import java.io.BufferedOutputStream;
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.FileOutputStream;
-
import java.io.IOException;
-
import java.io.InputStream;
-
import javax.servlet.ServletOutputStream;
-
import javax.servlet.http.HttpServletRequest;
-
import javax.servlet.http.HttpServletResponse;
-
-
-
-
public class ManageAction{
-
/**
-
* 通過流把文件傳到前台下載
-
* @param request
-
* @param response
-
* @param id 第幾個文件 (因為有多個文件 用;號隔開的)
-
* @param tzggid 對應的通知公告id
-
*/
-
-
-
public void findfile(HttpServletRequest request,HttpServletResponse response,
-
ServletOutputStream out = null;
-
FileInputStream ips = null;
-
List<Map<String, Object>> list = null; //此處為業務需要
-
list = jdbcTemplate.queryForList( "select fjaddress,fjname from tb_tzgg where id = ?",tzggid); //此處為業務需要
-
if(list.size() > 0){
-
try {
-
String url = String.valueOf(list. get(0).get("fjaddress")).split(";")[Integer.valueOf(id)]; //此處為業務需要 如果是測試可以指定路徑
-
//獲取文件存放的路徑
-
File file = new File(url);
-
String fileName=file.getName();
-
//獲取到文字 數據庫里對應的附件名字加上老的文件名字:filename 截取到后面的文件類型 例:txt 組成一個新的文件名字:newFileName
-
String newFileName = String.valueOf(list. get(0).get("fjname")).split(";")[Integer.parseInt(id)]+"."+fileName.substring(fileName.lastIndexOf(".")+1);
-
if(!file.exists()) {
-
//如果文件不存在就跳出
-
return;
-
}
-
ips = new FileInputStream(file);
-
response.setContentType( "multipart/form-data");
-
//為文件重新設置名字,采用數據庫內存儲的文件名稱
-
response.addHeader( "Content-Disposition", "attachment; filename=\"" + new String(newFileName.getBytes("UTF-8"),"ISO8859-1") + "\"");
-
out = response.getOutputStream();
-
//讀取文件流
-
int len = 0;
-
byte[] buffer = new byte[ 1024 * 10];
-
while ((len = ips.read(buffer)) != -1){
-
out.write(buffer,0,len);
-
}
-
out.flush();
-
} catch (Exception e){
-
e.printStackTrace();
-
} finally {
-
try {
-
out.close();
-
ips.close();
-
} catch (IOException e) {
-
System. out.println("關閉流出現異常");
-
e.printStackTrace();
-
}
-
}
-
}
-
return ;
-
}
-
}
前端訪問:
貼上我自己的數據庫讓你們更清晰一點
以上就是所有的java通過io流訪問文件的后台全部代碼了。希望能幫到你們
https://blog.csdn.net/L1481333167/article/details/81705769