java文件存儲伺服器
String realpath = ServletActionContext.getServletContext().getRealPath("/upload") ;//獲取伺服器路徑
String[] targetFileName = uploadFileName;
for (int i = 0; i < upload.length; i++) {
File target = new File(realpath, targetFileName[i]);
FileUtils.File(upload[i], target);
//這是一個文件復制類File()裡面就是IO操作,如果你不用這個類也可以自己寫一個IO復制文件的類
}
其中private File[] upload;// 實際上傳文件
private String[] uploadContentType; // 文件的內容類型
private String[] uploadFileName; // 上傳文件名
這三個參數必須這樣命名,因為文件上傳控制項默認是封裝了這3個參數的,且在action裡面他們應有get,set方法
2. java中如何實現從客戶端發送文件到伺服器端
伺服器端源碼:x0dx0aimport java.io.BufferedReader;x0dx0aimport java.io.File;x0dx0aimport java.io.FileNotFoundException;x0dx0aimport java.io.FileOutputStream;x0dx0aimport java.io.IOException;x0dx0aimport java.io.InputStream;x0dx0aimport java.io.InputStreamReader;x0dx0aimport java.net.ServerSocket;x0dx0aimport java.net.Socket;x0dx0ax0dx0a/**x0dx0a *x0dx0a * 文件名:ServerReceive.javax0dx0a * 實現功能:作為伺服器接收客戶端發送的文件x0dx0a *x0dx0a * 具體實現過程:x0dx0a * 1、建立SocketServer,等待客戶端的連接x0dx0a * 2、當有客戶端虛鍵毀連接的時候,按照雙方的約定,這時要讀取一行數據x0dx0a * 其中保存客戶端要發送的文件名和文件大小信息x0dx0a * 3、根據文件名在本地創建文件,並建立好流通信x0dx0a * 4、循環接收數據包,將數據包寫入文件x0dx0a * 5、當接收數據的長度等於提前文件發過來的文件長亮伏度,即表示文件接收完畢,關閉文件差備x0dx0a * 6、文件接收工作結束x0dx0ax0dx0apublic class ServerReceive {x0dx0a x0dx0a public static void main(String[] args) {x0dx0a x0dx0a /**與伺服器建立連接的通信句柄*/x0dx0a ServerSocket ss = null;x0dx0a Socket s = null;x0dx0a x0dx0a /**定義用於在接收後在本地創建的文件對象和文件輸出流對象*/x0dx0a File file = null;x0dx0a FileOutputStream fos = null;x0dx0a x0dx0a /**定義輸入流,使用socket的inputStream對數據包進行輸入*/x0dx0a InputStream is = null;x0dx0a x0dx0a /**定義byte數組來作為數據包的存儲數據包*/x0dx0a byte[] buffer = new byte[4096 * 5];x0dx0a x0dx0a /**用來接收文件發送請求的字元串*/x0dx0a String comm = null;x0dx0ax0dx0a/**建立socekt通信,等待伺服器進行連接*/x0dx0a try {x0dx0a ss = new ServerSocket(4004);x0dx0a s = ss.accept();x0dx0a } catch (IOException e) {x0dx0a e.printStackTrace();x0dx0a }x0dx0ax0dx0a/**讀取一行客戶端發送過來的約定信息*/x0dx0a try {x0dx0a InputStreamReader isr = new InputStreamReader(s.getInputStream());x0dx0a BufferedReader br = new BufferedReader(isr);x0dx0a comm = br.readLine();x0dx0a } catch (IOException e) {x0dx0a System.out.println("伺服器與客戶端斷開連接");x0dx0a }x0dx0a x0dx0a /**開始解析客戶端發送過來的請求命令*/x0dx0a int index = comm.indexOf("/#");x0dx0a x0dx0a /**判斷協議是否為發送文件的協議*/x0dx0a String xieyi = comm.substring(0, index);x0dx0a if(!xieyi.equals("111")){x0dx0a System.out.println("伺服器收到的協議碼不正確");x0dx0a return;x0dx0a }x0dx0a x0dx0a /**解析出文件的名字和大小*/x0dx0a comm = comm.substring(index + 2);x0dx0a index = comm.indexOf("/#");x0dx0a String filename = comm.substring(0, index).trim();x0dx0a String filesize = comm.substring(index + 2).trim();x0dx0ax0dx0a/**創建空文件,用來進行接收文件*/x0dx0a file = new File(filename);x0dx0a if(!file.exists()){x0dx0a try {x0dx0a file.createNewFile();x0dx0a } catch (IOException e) {x0dx0a System.out.println("伺服器端創建文件失敗");x0dx0a }x0dx0a }else{x0dx0a /**在此也可以詢問是否覆蓋*/x0dx0a System.out.println("本路徑已存在相同文件,進行覆蓋");x0dx0a }x0dx0a x0dx0a /**【以上就是客戶端代碼中寫到的伺服器的准備部分】*/x0dx0ax0dx0a/**x0dx0a * 伺服器接收文件的關鍵代碼*/x0dx0a try {x0dx0a /**將文件包裝到文件輸出流對象中*/x0dx0a fos = new FileOutputStream(file);x0dx0a long file_size = Long.parseLong(filesize);x0dx0a is = s.getInputStream();x0dx0a /**size為每次接收數據包的長度*/x0dx0a int size = 0;x0dx0a /**count用來記錄已接收到文件的長度*/x0dx0a long count = 0;x0dx0a x0dx0a /**使用while循環接收數據包*/x0dx0a while(count < file_size){x0dx0a /**從輸入流中讀取一個數據包*/x0dx0a size = is.read(buffer);x0dx0a x0dx0a /**將剛剛讀取的數據包寫到本地文件中去*/x0dx0a fos.write(buffer, 0, size);x0dx0a fos.flush();x0dx0a x0dx0a /**將已接收到文件的長度+size*/x0dx0a count += size;x0dx0a System.out.println("伺服器端接收到數據包,大小為" + size);x0dx0a }x0dx0a x0dx0a } catch (FileNotFoundException e) {x0dx0a System.out.println("伺服器寫文件失敗");x0dx0a } catch (IOException e) {x0dx0a System.out.println("伺服器:客戶端斷開連接");x0dx0a }finally{x0dx0a /**x0dx0a * 將打開的文件關閉x0dx0a * 如有需要,也可以在此關閉socket連接x0dx0a * */x0dx0a try {x0dx0a if(fos != null)x0dx0a fos.close();x0dx0a } catch (IOException e) {x0dx0a e.printStackTrace();x0dx0a }//catch (IOException e)x0dx0a }//finallyx0dx0a x0dx0a }//public static void main(String[] args)x0dx0a}//public class ServerReceivex0dx0ax0dx0a客戶端源碼:x0dx0ax0dx0aimport java.io.File;x0dx0aimport java.io.FileInputStream;x0dx0aimport java.io.FileNotFoundException;x0dx0aimport java.io.IOException;x0dx0aimport java.io.OutputStream;x0dx0aimport java.io.PrintStream;x0dx0aimport java.net.Socket;x0dx0ax0dx0a/**x0dx0a *x0dx0a * 文件名:ClientSend.javax0dx0a * 實現功能:作為客戶端向伺服器發送一個文件x0dx0a *x0dx0a * 具體實現過程:x0dx0a * 1、建立與伺服器端的連接,IP:127.0.0.1, port:4004x0dx0a * 2、將文件的名字和大小通過自定義的文件傳輸協議,發送到伺服器x0dx0a * 3、循環讀取本地文件,將文件打包發送到數據輸出流中x0dx0a * 4、關閉文件,結束傳輸x0dx0a *x0dx0a * */x0dx0a x0dx0apublic class ClientSend {x0dx0a x0dx0a public static void main(String[] args) {x0dx0a x0dx0a /**與伺服器建立連接的通信句柄*/x0dx0a Socket s = null;x0dx0a x0dx0a /**定義文件對象,即為要發送的文件x0dx0a * 如果使用絕對路徑,不要忘記使用'/'和'\'的區別x0dx0a * 具體區別,請讀者自行查詢x0dx0a * */x0dx0a File sendfile = new File("API.CHM");x0dx0a /**定義文件輸入流,用來打開、讀取即將要發送的文件*/x0dx0a FileInputStream fis = null;x0dx0a /**定義byte數組來作為數據包的存儲數據包*/x0dx0a byte[] buffer = new byte[4096 * 5];x0dx0a x0dx0a /**定義輸出流,使用socket的outputStream對數據包進行輸出*/x0dx0a OutputStream os = null;x0dx0ax0dx0a/**檢查要發送的文件是否存在*/x0dx0a if(!sendfile.exists()){x0dx0a System.out.println("客戶端:要發送的文件不存在");x0dx0a return;x0dx0a }x0dx0ax0dx0a/**與伺服器建立連接*/x0dx0a try {x0dx0a s = new Socket("127.0.0.1", 4004);x0dx0a }catch (IOException e) {x0dx0a System.out.println("未連接到伺服器");x0dx0a }x0dx0a x0dx0a /**用文件對象初始化fis對象x0dx0a * 以便於可以提取出文件的大小x0dx0a * */x0dx0a try {x0dx0a fis = new FileInputStream(sendfile);x0dx0a } catch (FileNotFoundException e1) {x0dx0a e1.printStackTrace();x0dx0a }x0dx0ax0dx0a/**首先先向伺服器發送關於文件的信息,以便於伺服器進行接收的相關准備工作x0dx0a * 具體的准備工作,請查看伺服器代碼。x0dx0a *x0dx0a * 發送的內容包括:發送文件協議碼(此處為111)/#文件名(帶後綴名)/#文件大小x0dx0a * */x0dx0a try {x0dx0a PrintStream ps = new PrintStream(s.getOutputStream());x0dx0a ps.println("111/#" + sendfile.getName() + "/#" + fis.available());x0dx0a ps.flush();x0dx0a } catch (IOException e) {x0dx0a System.out.println("伺服器連接中斷");x0dx0a }x0dx0ax0dx0a/**x0dx0a * 此處睡眠2s,等待伺服器把相關的工作準備好x0dx0a * 也是為了保證網路的延遲x0dx0a * 讀者可自行選擇添加此代碼x0dx0a * */x0dx0a try {x0dx0a Thread.sleep(2000);x0dx0a } catch (InterruptedException e1) {x0dx0a e1.printStackTrace();x0dx0a }x0dx0ax0dx0a/**之前的准備工作結束之後x0dx0a * 下面就是文件傳輸的關鍵代碼x0dx0a * */x0dx0a try {x0dx0a x0dx0a /**獲取socket的OutputStream,以便向其中寫入數據包*/x0dx0a os = s.getOutputStream();x0dx0a x0dx0a /** size 用來記錄每次讀取文件的大小*/x0dx0a int size = 0;x0dx0a x0dx0a /**使用while循環讀取文件,直到文件讀取結束*/x0dx0a while((size = fis.read(buffer)) != -1){x0dx0a System.out.println("客戶端發送數據包,大小為" + size);x0dx0a /**向輸出流中寫入剛剛讀到的數據包*/x0dx0a os.write(buffer, 0, size);x0dx0a /**刷新一下*/x0dx0a os.flush();x0dx0a }x0dx0a } catch (FileNotFoundException e) {x0dx0a System.out.println("客戶端讀取文件出錯");x0dx0a } catch (IOException e) {x0dx0a System.out.println("客戶端輸出文件出錯");x0dx0a }finally{x0dx0a x0dx0a /**x0dx0a * 將打開的文件關閉x0dx0a * 如有需要,也可以在此關閉socket連接x0dx0a * */x0dx0a try {x0dx0a if(fis != null)x0dx0a fis.close();x0dx0a } catch (IOException e) {x0dx0a System.out.println("客戶端文件關閉出錯");x0dx0a }//catch (IOException e)x0dx0a }//finallyx0dx0a x0dx0a }//public static void main(String[] args)x0dx0a}//public class ClientSend
3. java文件上傳到伺服器有什麼影響
java文件上傳到伺服器沒有什麼影響。存儲方式改變了以及存儲的文件夾會有改變,要注意存儲的文件夾名稱。Java是一種可以撰寫跨平台應用軟體的面向對象的程序設計語言,廣泛應用。
4. JAVA如何把本地文件上傳到伺服器。
如果伺服器開通了ftp服務,你的客戶端可以實現一個ftp的客戶端,通過ftp服務將文件上傳到伺服器的指定目錄下,可以使用org.apache.commons.net.ftp.FTPClient這個類去實現,非常的簡單,網上有很多現成的代碼可以用
5. java中怎麼把文件上傳到伺服器的指定路徑
文件從本地到伺服器的功能,其實是為了解決目前瀏覽器不支持獲取本地文件全路徑。不得已而想到上傳到伺服器的固定目錄,從而方便項目獲取文件,進而使程序支持EXCEL批量導入數據。
java中文件上傳到伺服器的指定路徑的代碼:
在前台界面中輸入:
<form method="post" enctype="multipart/form-data" action="../manage/excelImport.do">
請選文件:<input type="file" name="excelFile">
<input type="submit" value="導入" onclick="return impExcel();"/>
</form>
action中獲取前台傳來數據並保存
/**
* excel 導入文件明頌
* @return
* @throws IOException
*/
@RequestMapping("/usermanager/excelImport.do")
public String excelImport(
String filePath,
MultipartFile excelFile,HttpServletRequest request) throws IOException{
log.info("<<悉孫<<<<action:{} Method:{} start>>>>>>","usermanager","excelImport" );
if (excelFile != null){
String filename=excelFile.getOriginalFilename();
String a=request.getRealPath("u/cms/www/201509");
SaveFileFromInputStream(excelFile.getInputStream(),request.getRealPath("u/cms/www/201509"),filename);//保存到服激陸鄭務器的路徑
}
log.info("<<<<<<action:{} Method:{} end>>>>>>","usermanager","excelImport" );
return "";
}
/**
* 將MultipartFile轉化為file並保存到伺服器上的某地
*/
public void SaveFileFromInputStream(InputStream stream,String path,String savefile) throws IOException
{
FileOutputStream fs=new FileOutputStream( path + "/"+ savefile);
System.out.println("------------"+path + "/"+ savefile);
byte[] buffer =new byte[1024*1024];
int bytesum = 0;
int byteread = 0;
while ((byteread=stream.read(buffer))!=-1)
{
bytesum+=byteread;
fs.write(buffer,0,byteread);
fs.flush();
}
fs.close();
stream.close();
}
6. 用java將word文件上傳到伺服器,把word裡面的內容保存到資料庫
使用java中的io進行讀取
BufferedReader bufferedReader = null;
File file = new File("文檔地址+文檔名.docx");
if(!file.exists()){
System.out.println("文件不存在");
} else {
bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "讀取的字元格式(UTF-8或GBK)"));
String lineText = null;
while((lineText = bufferedReader.readLine()) != null){
if (linText != null && !lineText.eq("")){
System.out.println("一次讀取一行,一行內容為:" + lineText);
}
}
}
7. java後台文件上傳到資源伺服器上
package com.letv.dir.cloud.util;import com.letv.dir.cloud.controller.DirectorWatermarkController;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.*;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * Created by xijunge on 2016/11/24 0024. */public class HttpRequesterFile { private static final Logger log = LoggerFactory.getLogger(HttpRequesterFile.class); private static final String TAG = "uploadFile"; private static final int TIME_OUT = 100 * 1000; // 超時時間 private static final String CHARSET = "utf-8"; // 設置編碼 /** * 上傳文件到伺服器 * * @param file * 需要上傳的文件 * @param RequestURL * 文件伺服器的rul * @return 返回響應的內容 * */ public static String uploadFile(File file, String RequestURL) throws IOException {
String result = null;
String BOUNDARY = "letv"; // 邊界標識 隨機生成 String PREFIX = "--", LINE_END = "\r\n";
String CONTENT_TYPE = "multipart/form-data"; // 內容類型 try {
URL url = new URL(RequestURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(TIME_OUT);
conn.setConnectTimeout(TIME_OUT);
conn.setDoInput(true); // 允許輸入流 conn.setDoOutput(true); // 允許輸出流 conn.setUseCaches(false); // 不允許使用緩存 conn.setRequestMethod("POST"); // 請求方式 conn.setRequestProperty("Charset", CHARSET); // 設置編碼 conn.setRequestProperty("connection", "keep-alive");
conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);
8. javaweb如何將文件保存到伺服器的指定目錄
可以把文件目錄配置在web.xml文件的初始化參數中, 通過ServletAPI讀取文件目錄
比如
定義一個Properties文件保存相關配置
#可以上傳文件的後綴名
extensions=pptx,docx.doc,txt,jpg,jar
#單個文件的大小1M
fileMaxSize=1048576
#總共上傳文件大小5M
totalFileMaxSize=5242880
#文件保存路徑
filePath=z:/temp
#臨時文件路徑
tempDir=z:/temp/temp
使用Listener在伺服器啟動時載入配置信息
ServletContextcontext=event.getServletContext();
InputStreaminputStream=context
.getResourceAsStream("/WEB-INF/classes/file/upload/commons/uploadConfig.properties");
Propertiesproperties=newProperties();
try{
properties.load(inputStream);
context.setAttribute("fileConfig",properties);
System.out.println("properties="+properties.size());
}catch(IOExceptione){
e.printStackTrace();
}
在你上傳文件時通過配置文件讀取路徑保存
String filePath = ((Properties) this.getServletContext().getAttribute("fileConfig"))
.getProperty(FileUploadConstants.FILE_PATH);