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;
}
}