java服务器文件下载
‘壹’ java从服务器下载文件时,为什么必须先创建一个和服务器文件大小相同的临时文件
这是习惯,因为你不这样,文件大小就是在下载过程中动态变化,这不是好事。。。改变文件大小本身就有一系列对文件系统的操作,因为第一次被分配的文件位置并不一定有这么大的连续空间,增大文件大小,那么只能从别的空间找然后连接到这个文件上,逻辑上是连续的,物理上是不连续的,那么文件就在存储器上就变成分散的了,也就是分成好多碎片,在不同的位置,这对于读写来说严重影响速度。。。因为无论是硬盘还是flash都不是随机存储器,以分散就要频繁的定位。。。
最好是让文件在连续的区域内,那么你一开始就设定大小,那么系统会尽量分配到连续的存储区,
‘贰’ 求用java写一个ftp服务器客户端程序。
import java.io.*;
import java.net.*;public class ftpServer extends Thread{ public static void main(String args[]){
String initDir;
initDir = "D:/Ftp";
ServerSocket server;
Socket socket;
String s;
String user;
String password;
user = "root";
password = "123456";
try{
System.out.println("MYFTP服务器启动....");
System.out.println("正在等待连接....");
//监听21号端口
server = new ServerSocket(21);
socket = server.accept();
System.out.println("连接成功");
System.out.println("**********************************");
System.out.println("");
InputStream in =socket.getInputStream();
OutputStream out = socket.getOutputStream();
DataInputStream din = new DataInputStream(in);
DataOutputStream dout=new DataOutputStream(out);
System.out.println("请等待验证客户信息....");
while(true){
s = din.readUTF();
if(s.trim().equals("LOGIN "+user)){
s = "请输入密码:";
dout.writeUTF(s);
s = din.readUTF();
if(s.trim().equals(password)){
s = "连接成功。";
dout.writeUTF(s);
break;
}
else{s ="密码错误,请重新输入用户名:";<br> dout.writeUTF(s);<br> <br> }
}
else{
s = "您输入的命令不正确或此用户不存在,请重新输入:";
dout.writeUTF(s);
}
}
System.out.println("验证客户信息完毕...."); while(true){
System.out.println("");
System.out.println("");
s = din.readUTF();
if(s.trim().equals("DIR")){
String output = "";
File file = new File(initDir);
String[] dirStructure = new String[10];
dirStructure= file.list();
for(int i=0;i<dirStructure.length;i++){
output +=dirStructure[i]+"\n";
}
s=output;
dout.writeUTF(s);
}
else if(s.startsWith("GET")){
s = s.substring(3);
s = s.trim();
File file = new File(initDir);
String[] dirStructure = new String[10];
dirStructure= file.list();
String e= s;
int i=0;
s ="不存在";
while(true){
if(e.equals(dirStructure[i])){
s="存在";
dout.writeUTF(s);
RandomAccessFile outFile = new RandomAccessFile(initDir+"/"+e,"r");
byte byteBuffer[]= new byte[1024];
int amount;
while((amount = outFile.read(byteBuffer)) != -1){
dout.write(byteBuffer, 0, amount);break;
}break;
}
else if(i<dirStructure.length-1){
i++;
}
else{
dout.writeUTF(s);
break;
}
}
}
else if(s.startsWith("PUT")){
s = s.substring(3);
s = s.trim();
RandomAccessFile inFile = new RandomAccessFile(initDir+"/"+s,"rw");
byte byteBuffer[] = new byte[1024];
int amount;
while((amount =din.read(byteBuffer) )!= -1){
inFile.write(byteBuffer, 0, amount);break;
}
}
else if(s.trim().equals("BYE"))break;
else{
s = "您输入的命令不正确或此用户不存在,请重新输入:";
dout.writeUTF(s);
}
}
din.close();
dout.close();
in.close();
out.close();
socket.close();
}
catch(Exception e){
System.out.println("MYFTP关闭!"+e);
}
}}
‘叁’ java代码实现从svn服务器下载文件到本地
首先你要安装svn客户端,安装完成以后你右键选择svn中的import,输入你服务器端代码的地址,下载路径什么的自己配置,其他不用管,点击OK就可以了,不过你要有read权限才行。
‘肆’ java怎样读取http文件服务器上的文件列表并下载
把要下载的文件名存在数据库中,载入页面通过servlet或者action或者采用javaBean读取数据库数据,然后遍历出来,再通过servlet或者action的outputstream下载即可
‘伍’ java上传文件到服务器java实现文件上传的三种方式
一、需求
在项目开发中,遇到需要将页面上的文件上传至本地保存,之后这个上传的文件还能进行访问,后台是Spring Boot框架搭建的,只需将文件上传至Spring Boot项目编译之后的classes\static\文件夹中即可。如下图:
二、文件上传
1、 定义文件上传接口方法
// 在pom.xml引入spring-boot-starter-web依赖,即可导包import org.springframework.web.multipart.MultipartFile;// fileRoot:上传文件保存的根路径String upload(MultipartFile file, String fileRoot) throws IOException;2、文件上传接口方法实现
@Overridepublic String upload(MultipartFile file, String fileRoot) throws IOException { prepareFilePath(fileRoot); // 获取上传文件的原文件名 String fileName = file.getOriginalFilename(); // 规则化之后的文件上传根路径 String normalizeFileRoot = getNormalizeFileRoot(fileRoot); // 根据路径和文件名创建目标文件 File targetFile = new File(normalizeFileRoot, fileName); // 如果目标文件存在,删除 if (targetFile.exists()) targetFile.delete(); // 将目标文件进行转移 file.transferTo(targetFile); return String.format("%s\\%s", normalizeFileRoot, fileName);}/** fileRoot:上传文件保存的根路径 此方法是准备文件上传的路径,如果路径不存在,即创建*/private void prepareFilePath(String fileRoot) { File file = new File(Helper.normalizePath(fileRoot)); if (!file.exists()) file.mkdirs();}/** 该方法主要对文件路径进行规则化,如:D:\\\360Browser\///360Chrome\\//, 像这种路径就不正确,此方法可以将路径规则化为:D:\360Browser\360Chrome*/private String getNormalizeFileRoot(String fileRoot) { return Helper.normalizePath(fileRoot);}Helper工具类中的路径规则化方法
public static String normalizePath(String path) { String result = path.replaceAll("/+", Matcher.quoteReplacement(File.separator)); return result.replaceAll("\\\\+", Matcher.quoteReplacement(File.separator));}3、Controller
@PostMapping("/upload")public RequestResult upload(@RequestParam("file") MultipartFile file) throws IOException { Config config = configService.get("Upload", "FileRoot"); String filePath = busService.upload(file, config.getValue()); return RequestResult.success(filePath);}三、测试
1、 使用Postman进行文件上传测试
2、 在浏览器中输入定位文件.doc,可以将文件下载到本地