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,可以将文件下载到本地
