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方法
Ⅱ 如何用java讀取客戶端上傳的rar文件
壓縮文件的處理和普通的一樣,先上傳到伺服器,然後通過java的解壓縮方式將文件解壓出來,再進行讀取
Ⅲ java客戶端接受文件後文件還被線程佔用
客戶端這邊的output對象要關閉,然後清空緩存區域
out.flush();
out.close();
你要注意是不是在客戶端監聽那個方法裡面沒有釋放文件輸入流對象。所以才一直佔用。
我覺得出現你這樣的問題是因為你socket傳輸規則有問題。沒有提示程序是否接收完畢,所以客戶端會一直卡在read方法那裡。接收回來的文件對象也沒有釋放,建議socket傳輸規則 [文件長度|文件內容] 就是說先接收前面4(你自己定義的)個位元組獲取整個流的長度。然後在接著讀流,這個長度讀完了,說明文件接收完。就跳出循環結束接收數據。
Ⅳ java socket編程,客戶端發送文件給伺服器,伺服器接收到文件後如何返回確認信息告訴客戶端文件已接收
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.net.ServerSocket;
importjava.net.Socket;
/**
*
*文件名:ServerReceive.java
*實現功能:作為伺服器接收客戶端發送的文件
*
*具體實現過程:
*1、建立SocketServer,等待客戶端的連接
*2、當有客戶端連接的時候,按照雙方的約定,這時要讀取一行數據
*其中保存客戶端要發送的文件名和文件大小信息
*3、根據文件名在本地創建文件,並建立好流通信
*4、循環接收數據包,將數據包寫入文件
*5、當接收數據的長度等於提前文件發過來的文件長度,即表示文件接收完畢,關閉文件
*6、文件接收工作結束
*
*
*【註:此代碼僅為演示客戶端與伺服器傳送文件使用,
*每一個數據包之前沒有文件協議命令
*具體的協議傳輸和文件傳出的使用階段可根據自己程序自行放置】
*
*
*作者:小菜鳥
*創建時間:2014-08-19
*
**/
publicclassServerReceive{
publicstaticvoidmain(String[]args){
/**與伺服器建立連接的通信句柄*/
ServerSocketss=null;
Sockets=null;
/**定義用於在接收後在本地創建的文件對象和文件輸出流對象*/
Filefile=null;
FileOutputStreamfos=null;
/**定義輸入流,使用socket的inputStream對數據包進行輸入*/
InputStreamis=null;
/**定義byte數組來作為數據包的存儲數據包*/
byte[]buffer=newbyte[4096*5];
/**用來接收文件發送請求的字元串*/
Stringcomm=null;
/**建立socekt通信,等待伺服器進行連接*/
try{
ss=newServerSocket(4004);
s=ss.accept();
}catch(IOExceptione){
e.printStackTrace();
}
/**讀取一行客戶端發送過來的約定信息*/
try{
InputStreamReaderisr=newInputStreamReader(s.getInputStream());
BufferedReaderbr=newBufferedReader(isr);
comm=br.readLine();
}catch(IOExceptione){
System.out.println("伺服器與客戶端斷開連接");
}
/**開始解析客戶端發送過來的請求命令*/
intindex=comm.indexOf("/#");
/**判斷協議是否為發送文件的協議*/
Stringxieyi=comm.substring(0,index);
if(!xieyi.equals("111")){
System.out.println("伺服器收到的協議碼不正確");
return;
}
/**解析出文件的名字和大小*/
comm=comm.substring(index+2);
index=comm.indexOf("/#");
Stringfilename=comm.substring(0,index).trim();
Stringfilesize=comm.substring(index+2).trim();
/**創建空文件,用來進行接收文件*/
file=newFile(filename);
if(!file.exists()){
try{
file.createNewFile();
}catch(IOExceptione){
System.out.println("伺服器端創建文件失敗");
}
}else{
/**在此也可以詢問是否覆蓋*/
System.out.println("本路徑已存在相同文件,進行覆蓋");
}
/**【以上就是客戶端代碼中寫到的伺服器的准備部分】*/
/**
*伺服器接收文件的關鍵代碼*/
try{
/**將文件包裝到文件輸出流對象中*/
fos=newFileOutputStream(file);
longfile_size=Long.parseLong(filesize);
is=s.getInputStream();
/**size為每次接收數據包的長度*/
intsize=0;
/**count用來記錄已接收到文件的長度*/
longcount=0;
/**使用while循環接收數據包*/
while(count<file_size){
/**從輸入流中讀取一個數據包*/
size=is.read(buffer);
/**將剛剛讀取的數據包寫到本地文件中去*/
fos.write(buffer,0,size);
fos.flush();
/**將已接收到文件的長度+size*/
count+=size;
System.out.println("伺服器端接收到數據包,大小為"+size);
}
}catch(FileNotFoundExceptione){
System.out.println("伺服器寫文件失敗");
}catch(IOExceptione){
System.out.println("伺服器:客戶端斷開連接");
}finally{
/**
*將打開的文件關閉
*如有需要,也可以在此關閉socket連接
**/
try{
if(fos!=null)
fos.close();
}catch(IOExceptione){
e.printStackTrace();
}//catch(IOExceptione)
}//finally
}//publicstaticvoidmain(String[]args)
}//publicclassServerReceive
Ⅳ Java文件上傳獲取不到客戶端文件
你好像理會錯了點東西。
上傳是從客戶端讀取文件,通過流傳輸。伺服器接收數據,並寫入文件。
所以FileInputStream fis=new FileInputStream(fromPath);
這樣的代碼根本就有問題。
Ⅵ Java怎樣把文件寫入到客戶端的硬碟上
packagetest;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
publicclassTest{
publicstaticvoidmain(String[]args)throwsFileNotFoundException{
Stringsource="helloworld!";
StringfilePath="c:\file.txt";
StringnewFilePath="c:\"+System.currentTimeMillis()+".txt";
saveFile1(source);
saveFile2(filePath,newFilePath);
}
/**
*直接寫入數據
*@paramsource
*@return
*/
publicstaticbooleansaveFile1(Stringsource){
bytebuf[]=source.getBytes();
try(FileOutputStreamfs=newFileOutputStream("c:\file.txt")){
for(inti=0;i<buf.length;i++){
fs.write(buf[i]);
}
returntrue;
}catch(Exceptione){
e.printStackTrace();
}
returnfalse;
}
/**
*讀取文件另存為
*@paramfilePath
*@paramnewFilePath
*@return
*/
publicstaticbooleansaveFile2(StringfilePath,StringnewFilePath){
Filefile=newFile(filePath);
if(file.exists()&&file.isFile()){
try(FileInputStreamfi=newFileInputStream(file);
FileOutputStreamfs=newFileOutputStream(newFilePath))
{
intbuf;
while((buf=fi.read())!=-1){
fs.write(buf);
}
returntrue;
}catch(Exceptione){
e.printStackTrace();
}
}
returnfalse;
}
}