java传输文件,java文件传输系统

本文目录一览:

用Java实现在两台电脑之间的文件传输

使用Socket可以做到,不过直接编程一般都是在局域网内,如果要在不同局域网间通信,需要使用一台有公网IP的服务器,可以电脑A和电脑B同时连接服务器,然后A向服务器传递文件,服务器再将文件转发电脑B。也可以使用打洞的方式使A、B互联,此时服务器的作用是辅助打洞。A、B向服务器发送信息后socket不要关闭(假设使用10989端口),同时使用Serversocket绑定监听相同的端口(监听10989端口)。在java中有参数可以做到,具体方法请自行百度。服务器获取到A、B的外网地址和端口,将A的外网地址信息发送给B、将B的外网地址信息发送给A。然后使用A没有关闭的Socket向B发送一组信息(此时连接会失败,但是B的路由表上已经记录了A的信息),发送后A向服务器发送消息,服务器告诉B A已经发送消息。然后B使用未关闭的socket向A发送消息,就和A上监听的ServerSocket取得连接了。之后就可以互相传递数据。

java怎么把文件传输到file

common-fileupload是jakarta项目组开发的一个功能很强大的上传文件组件

下面先介绍上传文件到服务器(多文件上传):

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;

import java.util.regex.*;

import org.apache.commons.fileupload.*;

public class upload extends HttpServlet {

private static final String CONTENT_TYPE = “text/html; charset=GB2312”;

//Process the HTTP Post request

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType(CONTENT_TYPE);

PrintWriter out=response.getWriter();

try {

DiskFileUpload fu = new DiskFileUpload();

// 设置允许用户上传文件大小,单位:字节,这里设为2m

fu.setSizeMax(2*1024*1024);

// 设置最多只允许在内存中存储的数据,单位:字节

fu.setSizeThreshold(4096);

// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

fu.setRepositoryPath(“c://windows//temp”);

//开始读取上传信息

List fileItems = fu.parseRequest(request);

// 依次处理每个上传的文件

Iterator iter = fileItems.iterator();

//正则匹配,过滤路径取文件名

String regExp=”.+////(.+)$”;

//过滤掉的文件类型

String[] errorType={“.exe”,”.com”,”.cgi”,”.asp”};

Pattern p = Pattern.compile(regExp);

while (iter.hasNext()) {

FileItem item = (FileItem)iter.next();

//忽略其他不是文件域的所有表单信息

if (!item.isFormField()) {

String name = item.getName();

long size = item.getSize();

if((name==null||name.equals(“”)) size==0)

continue;

Matcher m = p.matcher(name);

boolean result = m.find();

if (result){

for (int temp=0;tempERRORTYPE.LENGTH;TEMP++){

if (m.group(1).endsWith(errorType[temp])){

throw new IOException(name+”: wrong type”);

}

}

try{

//保存上传的文件到指定的目录

//在下文中上传文件至数据库时,将对这里改写

item.write(new File(“d://” + m.group(1)));

out.print(name+” “+size+””);

}

catch(Exception e){

out.println(e);

}

}

else

{

throw new IOException(“fail to upload”);

}

}

}

}

catch (IOException e){

out.println(e);

}

catch (FileUploadException e){

out.println(e);

}

}

}

现在介绍上传文件到服务器,下面只写出相关代码:

以sql2000为例,表结构如下:

字段名:name filecode

类型: varchar image

数据库插入代码为:PreparedStatement pstmt=conn.prepareStatement(“insert into test values(?,?)”);

代码如下:

。。。。。。

try{

这段代码如果不去掉,将一同写入到服务器中

//item.write(new File(“d://” + m.group(1)));

int byteread=0;

//读取输入流,也就是上传的文件内容

InputStream inStream=item.getInputStream();

pstmt.setString(1,m.group(1));

pstmt.setBinaryStream(2,inStream,(int)size);

pstmt.executeUpdate();

inStream.close();

out.println(name+” “+size+” “);

}

。。。。。。

这样就实现了上传文件至数据库

java中怎样上传文件

Java代码实现文件上传

FormFile file=manform.getFile(); 

  String newfileName = null;

  String newpathname=null;

  String fileAddre=”/numUp”;

  try {

   InputStream stream = file.getInputStream();// 把文件读入

    String filePath = request.getRealPath(fileAddre);//取系统当前路径

          File file1 = new File(filePath);//添加了自动创建目录的功能

       ((File) file1).mkdir();   

    newfileName = System.currentTimeMillis()

     + file.getFileName().substring(

       file.getFileName().lastIndexOf(‘.’));

   ByteArrayOutputStream baos = new ByteArrayOutputStream();

   OutputStream bos = new FileOutputStream(filePath + “/”

     + newfileName);

   newpathname=filePath+”/”+newfileName;

   System.out.println(newpathname);

   // 建立一个上传文件的输出流

    System.out.println(filePath+”/”+file.getFileName());

   int bytesRead = 0;

   byte[] buffer = new byte[8192];

   while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {

    bos.write(buffer, 0, bytesRead);// 将文件写入服务器

   }

   bos.close();

   stream.close();

    } catch (FileNotFoundException e) {

   e.printStackTrace();

  } catch (IOException e) {

   e.printStackTrace();

  }

java 服务器与客户端的文件传输

可以直接通过流的形式上传或者下载。

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.Properties;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.Session;

import com.jcraft.jsch.SftpException;

import hkrt.b2b.view.util.Log;

import java.util.Vector;

import zn.ccfccb.util.CCFCCBUtil;

/**

*/

public class CCFCCBSftp {

/**

* 连接sftp服务器

*

* @return

*/

public static ChannelSftp connect() {

ChannelSftp sftp = null;

try {

JSch jsch = new JSch();

jsch.getSession(CCFCCBUtil.CCFCCBHOSTNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22);

Session sshSession = jsch.getSession(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22);

System.out.println(“Session created.”);

sshSession.setPassword(CCFCCBUtil.CCFCCBLOGINPASSWORD);

Properties sshConfig = new Properties();

sshConfig.put(“StrictHostKeyChecking”, “no”);

sshSession.setConfig(sshConfig);

sshSession.connect();

System.out.println(“Session connected.”);

System.out.println(“Opening Channel.”);

Channel channel = sshSession.openChannel(“sftp”);

channel.connect();

sftp = (ChannelSftp) channel;

System.out.println(“Connected to ” + CCFCCBUtil.CCFCCBHOSTNAME + “.”);

} catch (Exception e) {

}

return sftp;

}

/**

* 连接sftp服务器

*

* @param host 主机

* @param port 端口

* @param username 用户名

* @param password 密码

* @return

*/

public static ChannelSftp connect(String host, int port, String username,

String password) {

ChannelSftp sftp = null;

try {

JSch jsch = new JSch();

jsch.getSession(CCFCCBUtil.CCFCCBHOSTNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22);

Session sshSession = jsch.getSession(CCFCCBUtil.CCFCCBLOGINNAME, host, port);

System.out.println(“Session created.”);

sshSession.setPassword(CCFCCBUtil.CCFCCBLOGINPASSWORD);

Properties sshConfig = new Properties();

sshConfig.put(“StrictHostKeyChecking”, “no”);

sshSession.setConfig(sshConfig);

sshSession.connect();

System.out.println(“Session connected.”);

System.out.println(“Opening Channel.”);

Channel channel = sshSession.openChannel(“sftp”);

channel.connect();

sftp = (ChannelSftp) channel;

System.out.println(“Connected to ” + host + “.”);

} catch (Exception e) {

}

return sftp;

}

/**

* 上传文件

*

* @param directory 上传的目录

* @param uploadFile 要上传的文件

* @param sftp

*/

public void upload(String directory, String uploadFile, ChannelSftp sftp) {

try {

s;

File file = new File(uploadFile);

s(new FileInputStream(file), file.getName());

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 下载文件

*

* @param directory 下载目录

* @param downloadFile 下载的文件

* @param saveFile 存在本地的路径

* @param sftp

* @return

*/

public static String download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {

try {

s;

File file = new File(saveFile);

FileOutputStream fos = new FileOutputStream(file);

s(downloadFile, fos);

s;

fos.close();

} catch (Exception e) {

Log.info(“下载文件过程出错:” + e.getMessage());

return “false”;

}

return “true”;

}

/**

* 删除文件

*

* @param directory 要删除文件所在目录

* @param deleteFile 要删除的文件

* @param sftp

*/

public void delete(String directory, String deleteFile, ChannelSftp sftp) {

try {

s;

s;

} catch (Exception e) {

}

}

/**

* 列出目录下的文件

*

* @param directory 要列出的目录

* @param sftp

* @return

* @throws SftpException

*/

public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException {

return s;

}

public static void main(String[] args) {

CCFCCBSftp sf = new CCFCCBSftp();

String host = CCFCCBUtil.CCFCCBHOSTNAME;

int port = 22;

String username = CCFCCBUtil.CCFCCBLOGINNAME;

String password = CCFCCBUtil.CCFCCBLOGINPASSWORD;

String directory = “/ccfccb/904999900099/download/”;

//String uploadFile = “D:\\tmp\\upload.txt”;

String downloadFile = “CCF_904999900099_20150317_0001.zip”;

String saveFile = CCFCCBUtil.CCFCCBUploadFilePath + “//” + “CCF_904999900099_20150317_0001.zip”;

//String deleteFile = “delete.txt”;

ChannelSftp sftp = CCFCCBS(host, port, username, password);

//sf.upload(directory, uploadFile, sftp);

CCFCCBS(directory, downloadFile, saveFile, sftp);

//sf.delete(directory, deleteFile, sftp);

try {

s;

// s(“ss”);

System.out.println(“finished”);

} catch (Exception e) {

}

}

}

java socket如何实现一次传送多个文件

很简单,就是把多个文件“变成”一个文件传送就可以了,每个文件都是一个流,把这些流输入到一个流中合并流传输即可,这个是基本思路。实现差不多以下两个方法

1、直接流拼接,循环要传输的文件列表,多个InputStream,然后输出到一个OutputStream,这个out就是发送数据的端口,为了接收端能够识别每个文件从而分割流,需要每个流中结尾添加分隔符。其实这就是HTTP文件上传的做法。

2、就比较简单了,职业使用ZIP工具包吧需要传输的多文件压缩成一个文件传输,接收端直接解压缩就完事。

需要注意的是,发送多文件上传你需要提取计算好总传输量字节大小放在传输报文头部告诉接收端你要发送的数据有多大,不然接收端可能无法完整接收数据。

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.copyFile(upload[i], target);

//这是一个文件复制类copyFile()里面就是IO操作,如果你不用这个类也可以自己写一个IO复制文件的类

}

其中private File[] upload;// 实际上传文件

private String[] uploadContentType; // 文件的内容类型

private String[] uploadFileName; // 上传文件名

这三个参数必须这样命名,因为文件上传控件默认是封装了这3个参数的,且在action里面他们应有get,set方法

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/309158.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-04 19:30
下一篇 2025-01-04 19:30

相关推荐

  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Deepin系统分区设置教程

    本教程将会详细介绍Deepin系统如何进行分区设置,分享多种方式让您了解如何规划您的硬盘。 一、分区的基本知识 在进行Deepin系统分区设置之前,我们需要了解一些基本分区概念。 …

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • 如何在树莓派上安装Windows 7系统?

    随着树莓派的普及,许多用户想在树莓派上安装Windows 7操作系统。 一、准备工作 在开始之前,需要准备以下材料: 1.树莓派4B一台; 2.一张8GB以上的SD卡; 3.下载并…

    编程 2025-04-29

发表回复

登录后才能评论