Java远程传输文件(增加覆盖取消等功能)

合集下载

java sftp 常用方法

java sftp 常用方法

一、介绍随着信息化时代的到来,数据传输变得越来越重要。

在企业中,有时候需要通过网络将数据从一个服务器传输到另一个服务器。

而其中一种常用的数据传输协议就是SFTP(Secure File Transfer Protocol)。

SFTP是一种基于SSH协议的安全文件传输协议。

它提供了一种安全的通信渠道以及文件传输功能,能够有效地保护传输的数据安全。

在Java中,我们可以通过一些常用的方法来实现SFTP的文件传输,本文将介绍一些Java中SFTP常用的方法。

二、建立SFTP连接在Java中,我们可以使用JSch库来建立SFTP连接。

需要在项目中导入JSch库的jar包。

我们可以通过以下方法来建立SFTP连接:1. 创建JSch对象我们可以通过new JSch()来创建一个JSch对象,用于后续的SFTP连接。

2. 建立Session使用JSch对象的getSession方法建立一个Session对象,需要传入用户名、主机位置区域和端口号等参数,并通过setPassword或setPrivateKey方法设置认证方式。

3. 打开Channel在建立Session之后,可以通过Session对象的openChannel方法打开一个Channel,类型为" sftp"。

4. 建立SFTP连接使用ChannelSftp的connect方法来建立SFTP连接。

以上即为建立SFTP连接的步骤,通过这些方法,我们可以在Java中轻松地实现SFTP连接的功能。

三、上传文件一旦建立了SFTP连接,我们就可以进行文件的上传操作了。

通过以下方法可以实现文件的上传:1. 使用put方法在ChannelSftp对象中,可以使用put方法来上传文件。

需要传入本地文件路径和远程文件路径两个参数。

2. 设置传输模式在上传文件之前,可以通过ChannelSftp对象的setmode方法来设置传输模式,常用的传输模式包括OVERWRITE、RESUME等。

java的远程登录和文件传输功能的实现

java的远程登录和文件传输功能的实现

基于java的远程登录和文件传输功能的实现摘要Internet发展至今产生了两种比较重要的网络体系结构:ISO/OSI和TCP/IP参考模型,ISO/OSI模型有7层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

而TCP/IP模型只有4层:主机至网络层,互连网层,传输层,应用层。

其中TCP/IP 参考模型中的应用层包含所有的高层协议,最早引入的是虚拟终端协议,文件传输协议和电子邮件协议。

本文对网络计算机相互通信的机理进行比较细致和深入的分析,并采用java编程工具实现了远程登录和文件传输的功能。

关键词:TCP/IP JAVA 远程登录文件传输AbstractInternet produces two kinds of more important network system structure so far that Internet is developed, ISO/OSI and TCP/IP consult models, ISO/OSI model is 7 layers: Physics layer, data link layer, network layer, transport layer, session layer, persentaltion layer, opplication layer. And TCP/IP model is 4 layers: From host computer to Internet, network layer, transport layer, opplication layer. TCP/IP among them consult application layer of model include all on the senior level Protocol, introduce TELecommunications NETwork , File Transfer Protocol and Simple Mail Transfer Protocol, Careful and deep analysis that this text compares mechanism that the network computer communicates each other, and adopt java programming tool to realize the functions of telecommunications network and file transfer.KEY WORDS: TCP/IP JA V A TELNET FTP目录前言--------------------------------------------------------------------------------------------1 第一章互联网概述---------------------------------------------------------------------- 3 1.1 互联网的发展状况--------------------------------------------------------------------3 1.2 互联网的应用-------------------------------------------------------------------------5第二章互联网中两种重要的参考模型-----------------------------------------------6 2.1 OSI参考模型-------------------------------------------------------------------------6 2.2 TCP/IP参考模型--------------------------------------------------------------------8第3章远程登录的功能实现----------------------------------------------------------------9 3.1 虚拟终端-------------------------------------------------------------------------------9 3.2 远程登录协议 --------------------------------------------------------------------------11 3.3 有关远程登录的实现方法(线程的概念)---------------------------------------13 3.4 远程登录的最终完成---------------------------------------------------------------18 第4章文件传输的执行行为和功能------------------------------------------------------27 4.1传输文件--------------------------------------------------------------------------------27 4.2 文件传输的传输模式----------------------------------------------------------------28 4.3 构造控制连接和数据连接------------------------------------------------------------32 4.4 文件传输程序的完成-----------------------------------------------------------------42 第5章总结----------------------------------------------------------------------------------53 参考文献---------------------------------------------------------------------------------------54 谢辞----------------------------------------------------------------------------------------55前言历史的发展表明I n t e r n e t的产生要追溯到最开始的时间,穴壁上的画、烟信号、驿站—所有这些通信方式都使我们的祖先一直在考虑一个更好的通信方式。

java传输文件 方案

java传输文件 方案

Java传输文件方案1. 简介在开发Java应用程序时,经常需要通过网络传输文件。

本文将介绍几种常见的Java传输文件的方案,包括使用原生Java API实现文件传输、使用FTP协议传输文件以及使用HTTP协议传输文件。

2. 使用原生Java API实现文件传输Java提供了一系列的API来处理文件传输操作。

下面将介绍如何使用原生Java API实现文件传输。

2.1 文件上传在Java中,可以使用java.io包提供的类来实现文件上传。

以下是一个简单的文件上传示例:import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import .Socket;public class FileUploader {public static void uploadFile(File file, String host, int port) thr ows IOException {try (Socket socket = new Socket(host, port);FileInputStream fileInputStream = new FileInputStream(fil e);OutputStream outputStream = socket.getOutputStream()) { byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = fileInputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}}}}在上述示例中,我们使用Socket类实现了与服务器建立连接,并使用FileInputStream读取文件内容,并通过OutputStream将文件内容写入到服务器。

计算机程序设计员实操考核远程控制题目

计算机程序设计员实操考核远程控制题目

计算机程序设计员实操考核远程控制题目1. 背景远程控制是计算机程序设计员在实际工作中经常遇到的情况之一。

无论是在服务器管理、系统维护还是软件调试和故障排查等方面,远程控制都扮演着重要的角色。

因此,在计算机程序设计员的实操考核中,远程控制题目是必不可少的一部分。

2. 题目要求在本题中,考察的是计算机程序设计员在远程控制方面的实际操作能力。

具体要求如下:1.实现一个简单的远程控制程序,可以通过网络连接远程控制一台虚拟机。

2.程序需要支持以下操作:•连接虚拟机:通过输入虚拟机的IP地址和端口号,建立与虚拟机的网络连接。

•发送命令:可以向虚拟机发送命令,并获取命令的执行结果。

•文件传输:可以向虚拟机发送文件,并在虚拟机上进行保存。

3.提供适当的用户界面,使用户可以方便地进行远程控制操作。

4.实现的程序需要具备一定的安全性,包括对连接的认证和加密等安全措施。

3. 实现思路为了完成上述题目要求,我们可以采取以下实现思路:1.选择合适的编程语言和开发环境。

根据自己的熟悉程度和实际需求,选择一种合适的编程语言和开发环境。

常见的选择包括Python、Java、C#等。

2.理解远程控制的基本原理和相关技术。

了解远程控制的基本原理,并学习相关技术和工具,如TCP/IP、SSH、Telnet等。

3.设计程序的结构和功能。

4.实现程序的各个功能模块,包括建立连接、发送命令和文件传输等。

5.编写用户界面,提供友好的操作界面。

6.添加安全性措施,包括连接认证和加密等。

7.进行测试和调试,确保程序的可靠性和稳定性。

8.完善文档,包括项目介绍、使用说明和开发文档等。

4. 参考资源在实现过程中,可以参考以下资源:•官方文档:参考相应编程语言和开发环境的官方文档,了解相关函数和类的使用方法。

•在线教程:通过搜索引擎找到相关的在线教程和示例代码,学习相关知识和技巧。

•开源项目:寻找开源的远程控制软件或类库,学习其实现思路和代码实现方式。

【Java】后台将文件上传至远程服务器

【Java】后台将文件上传至远程服务器

【Java】后台将⽂件上传⾄远程服务器问题:由于系统在局域⽹(能访问外⽹)内,但外⽹⽆法请求局域⽹内服务器⽂件和进⾏处理⽂件。

解决:建⽴⽂件服务器,⽤于存储⽂件及外⽹调⽤。

客户端(⽂件上传):package cn.hkwl.lm.util;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import .HttpURLConnection;import .MalformedURLException;import .URL;import java.util.Iterator;import java.util.Map;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.mime.FormBodyPart;import org.apache.http.entity.mime.MultipartEntity;import org.apache.http.entity.mime.content.FileBody;import org.apache.http.entity.mime.content.StringBody;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class UploadToServer {private static final Logger log = LoggerFactory.getLogger(UploadToServer.class);public static String postFile(String url,Map<String, Object> param, File file) throws ClientProtocolException, IOException {String res = null;CloseableHttpClient httpClient = HttpClients.createDefault();HttpPost httppost = new HttpPost(url);httppost.setEntity(getMutipartEntry(param,file));CloseableHttpResponse response = httpClient.execute(httppost);HttpEntity entity = response.getEntity();if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {res = EntityUtils.toString(entity, "UTF-8");response.close();} else {res = EntityUtils.toString(entity, "UTF-8");response.close();throw new IllegalArgumentException(res);}return res;}private static MultipartEntity getMutipartEntry(Map<String, Object> param, File file) throws UnsupportedEncodingException { if (file == null) {throw new IllegalArgumentException("⽂件不能为空");}FileBody fileBody = new FileBody(file);FormBodyPart filePart = new FormBodyPart("file", fileBody);MultipartEntity multipartEntity = new MultipartEntity();multipartEntity.addPart(filePart);Iterator<String> iterator = param.keySet().iterator();while (iterator.hasNext()) {String key = iterator.next();FormBodyPart field = new FormBodyPart(key, new StringBody((String) param.get(key)));multipartEntity.addPart(field);}return multipartEntity;}}服务器端(⽂件接收):package cn.hkwl.office.action;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Random;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONObject;import mons.fileupload.FileItem;import mons.fileupload.disk.DiskFileItemFactory;import mons.fileupload.servlet.ServletFileUpload;import org.apache.jasper.tagplugins.jstl.core.Out;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import monsMultipartResolver;import cn.zy.action.BaseAction;@Controller@RequestMapping("/file")public class FileAction extends BaseAction {/****/private static final long serialVersionUID = -5865227624891447594L;@RequestMapping("/receive")public @ResponseBody void receive(HttpServletRequest request,HttpServletResponse response) throws Exception {JSONObject json=new JSONObject();// 将当前上下⽂初始化给 CommonsMutipartResolver (多部分解析器)CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());// 检查form中是否有enctype="multipart/form-data"if (multipartResolver.isMultipart(request)) {// 将request变成多部分requestMultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;// 获取multiRequest 中所有的⽂件名Iterator<String> iter = multiRequest.getFileNames();// 定义绝对路径String localPath = getRealPath("/upload/lm");File path = new File(localPath);// ⽂件夹不存在则创建⽂件夹if (!path.exists()) {path.mkdir();}while (iter.hasNext()) {// ⼀次遍历所有⽂件MultipartFile file = multiRequest.getFile(iter.next().toString());if (file != null) {String filepath = localPath +File.separator+ file.getOriginalFilename();// 上传file.transferTo(new File(filepath));// ⽂件数据存储起来json.put("success", true);json.put("httpUrl", "http://serverhostip:9080/lmoffice/upload/lm/"+file.getOriginalFilename()); }}}else{json.put("success", false);}outJson(json);}}应⽤使⽤:private String getHttpUrl(String savePath) throws ClientProtocolException, IOException{File file=new File(getRealPath(savePath));System.out.println(file.exists());Map<String,Object> param=new HashMap<String, Object>();String res=UploadToServer.postFile("http://serverhostip:9080/lmoffice/file/receive",param,file); JSONObject result=JSONObject.fromObject(res);if(result.getBoolean("success")){file.delete();//删除本地⽂件return result.getString("httpUrl");}return "";}/**** 管线迁移公告** @param landId*/@RequestMapping("/gxqygg.do")public @ResponseBodyvoid createGXQYGG(Long landId) {JSONObject json = new JSONObject();Land land = landService.getLandInfo(landId);Map<String, Object> map = new HashMap<String, Object>();map.put("land", land);Calendar calendar = Calendar.getInstance();// 取当前⽇期。

Java远程传输文件(增加覆盖取消等功能)

Java远程传输文件(增加覆盖取消等功能)

发送端/ *by小郭*远程文件传输**/import javax.swing.*;import .*;import java.io.*;import java.awt.*;import ng.*;import java.awt.event.*;public class TcpSend extends JFrame implements ActionListener {private JButton button;private JFileChooser chooser;//private FileInputStream in;//private String filename;//byte[] by=new byte[100000];public TcpSend(){super("小郭文件传输发送端");this.setBounds(10,10,400,400);this.setLayout(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);this.setVisible(true);chooser=new JFileChooser();button=new JButton("发送");button.setFont(new Font("楷体",Font.PLAIN,30));button.setBounds(0,0,400,400);add(button);button.addActionListener(this);}public void actionPerformed(ActionEvent e){chooser.showOpenDialog(this);if(chooser.showOpenDialog(this)==JFileChooser.CANCEL_OPTION) {button.setText("取消文件发送");//小bug 按2次才能取消return;}Send send=new Send(chooser.getSelectedFile());send.start();button.setText("文件已发送");}public static void main(String[] args){new TcpSend();}}//end TcpSendclass Send extends Thread{private File file;private Socket socket;private DataOutputStream Dout;private DataInputStream Din;BufferedInputStream buffered;Send(File file){this.file = file;try{socket= new Socket("localhost",1111);//localhost可以改成IP 如果是内网直接填内网IP 外网的话IP要映射buffered=new BufferedInputStream(socket.getInputStream());//创建一个缓冲区数组,保存套接字s输入流,以便使用Din = new DataInputStream(buffered);//数据输入流,用来读取Dout = new DataOutputStream(socket.getOutputStream());//数据输出流,用来写入由数据输入流读取的数据} catch (IOException e) {e.printStackTrace();}}public void run(){try{Dout.writeUTF(file.getName());//将文件名写入输出流JOptionPane.showMessageDialog(null,"发送的文件是:"+file.getName());boolean isAccepted = Din.readBoolean();//接收端是否读取输入字节if(isAccepted){// JOptionPane.showMessageDialog(null,"对方已经接受文件传输,点击确定开始传输!");BufferedInputStream Bin = new BufferedInputStream(new FileInputStream(file));//创建一个缓冲区数组,保存文件输入流byte[] by = new byte[100000];int l;while(( l =Bin.read(by))!= -1)//从输入流中将各字节读取到by数组中只要不是=-1 如果=-1即到达流末尾就跳出循环{Dout.write(by,0,l);//将by数组中从偏移地址0开始的1个字节写入输出流。

java网络文件传输的实现

java网络文件传输的实现

java网络文件传输的实现——Socket编程本程序分为服务器和客户端两个小程序。

主要实现的功能是:客户端向服务器端请求一个文件的传输连接,服务器接收到请求命令后,要求客户端发送用户名和密码,如果正确,就执行传输文件的过程,客户端接收完后,保存到一个文件中并在屏幕上显示出来。

设计原理:服务器端建立一个SocketServer等待客户端的连接,每来一个客户端的请求连接,就创建一个新的线程对其进行单独服务,然后继续等待其他的客户端的连接。

客户端向服务器发送文件传输请求,在服务器端要求鉴权时,输入用户名和密码发送给服务器验证,如果验证通过就开始文件传输。

使用方法,如果需要重新编译的话输入以下两条命令:javac SendFileSocket.javajavac SendFileClient.java在命令行下的运行方式:服务器端:java SendFileSocket客户端:java SendFileClient serverIPAddress例如:java SendFileClient 192.168.0.153服务器程序:public class SendFileSocket extends Thread{/*** @param args*/public static void main(String[] args ){/*if ( args.length > 0 ) // 如果有参数输入就启动服务器程序 {server( );} else{// 否则启动客户端进程client( );}*/server();//启动服务器程序}private static final int PORT= 6000;private Socket s;private static final String name="zieckey";private static final String password ="123456";public SendFileSocket(Socket s ){this.s = s;}public void run(){try{OutputStream os = s.getOutputStream();InputStream is = s.getInputStream();os.write("Hello,welcome you!".getBytes());byte[] buf =new byte[100];while( true ){int len = is.read( buf );String revStr =new String( buf, 0, len );System.out.println("This client wants to "+revStr );String fileName;if( revStr.startsWith("get "))//表明客户端请求传输一个文件{os.write("Please input your name and password! Using the format:name@password".getBytes());fileName =getFileName( revStr );len = is.read( buf );revStr =new String( buf, 0, len );System.out.println("The received user name and password:"+revStr);if( revStr.startsWith("zieckey@123456")){FileInputStream fins =new FileInputStream( fileName );//byte[] fielBuf = new byte[100];int data;while(-1 !=( data = fins.read()))//从文件中读取数据,每次读取1字节{os.write( data );//将读取到的数据写到网络数据流中发送给客户段}break;}}else{os.write("geting file's usage is:get filename".getBytes());}}os.close();is.close();s.close();}catch(Exception e ){e.printStackTrace();}}/** 作用:从客户端发来了文件请求命令中提取出所请求的文件名 * 参数:客户端发来了文件请求命令字符串,应该以“get ”开头 * 返回值:提取出所请求的文件名*/private String getFileName(String revStr ){String fileName;fileName = revStr.substring( 3 );while( fileName.startsWith(" ")){fileName = fileName.substring( 1 );}return fileName;}public static void server(){System.out.println("This is server");try{ServerSocket ss =new ServerSocket(PORT);int count= 0;while( true ){// 创建一个Socket等待客户端连接Socket s = ss.accept();count++;System.out.println("This is the "+count+"'st client connetion!");new SendFileSocket( s ).start();// 启动一个线程为这个客户端服务}}catch(Exception ex ){ex.printStackTrace();}}/*public static void client(){System.out.println( "This is client" );try{// 创建一个SocketSocket s = new Socket( InetAddress.getByName( null ), PORT );OutputStream os = s.getOutputStream( );// 输出流InputStream is = s.getInputStream( );// 输入流byte[] buf = new byte[100];int len = is.read( buf );// 从输入流中读取数据到bufSystem.out.println( new String( buf, 0, len ) );// 向输出流中写入数据,请求传输一个文件os.write( "get server.txt".getBytes( ) );len = is.read( buf );// 从输入流中读取数据到bufString tempStr = new String(buf,0,len);if ( tempStr.startsWith( "Please input your name and password" ) ){System.out.print("Please input your name and password, ");System.out.print("Using the format:name@password:");System.in.read( buf );os.write( buf );}//开始读取文件数据并把它写到一个名为"clientread.txt"的文件中FileOutputStream fos = new FileOutputStream( "clientread.txt" ); int data;while ( -1 != ( data = is.read( ) ) ){fos.write( data );}System.out.println("\nFile has been recerved successfully.");os.close( );is.close( );s.close( );} catch ( Exception ex ){ex.printStackTrace( );}}*/}客户端程序:import .InetAddress;import .InetSocketAddress;import .Socket;public class SendFileClient{private static final int Server_PORT = 6000;private static final int Client_PORT = 6001;/*** 使用方法:运行这个程序需要带上参数,参数类型为点分十进制的ip地址,例如:192.168.0.153* @param args* @throws IOException*/public static void main(String[] args )throws IOException{// TODO Auto-generated method stubSystem.out.println("This is client");/*System.out.print("Please input your name and password, ");System.out.print("Using the format:name@password:");byte[] buf = new byte[100];System.in.read( buf );*/byte[] buf =new byte[100];byte[]name=new byte[100];//InetAddress inetAddr;if(!isIPAddress(args[0])){System.out.println("The usage is : java SendFileClient ipaddress");System.out.println("For example : java SendFileClient 192.168.0.153");return;}String ipStr = args[0];try{// 创建一个SocketSocket s =new Socket();s.connect(new InetSocketAddress(ipStr , Server_PORT ), Client_PORT );OutputStream os = s.getOutputStream();// 输出流InputStream is = s.getInputStream();// 输入流int len = is.read( buf );// 从输入流中读取数据到bufSystem.out.println(new String( buf, 0, len ));// 向输出流中写入数据,请求传输一个文件os.write("get server.txt".getBytes());len = is.read( buf );// 从输入流中读取数据到bufString tempStr =new String(buf,0,len);if( tempStr.startsWith("Please input your name and password")){System.out.println("Please input your name and password, ");System.out.println("Using the format:name@password:");do{System.in.read(name);}while(name.length<5 );os.write(name);}//开始读取文件数据并把它写到一个名为"clientread.txt"的文件中FileOutputStream fos =new FileOutputStream("clientread.txt");int data;while(-1 !=( data = is.read())){fos.write( data );}System.out.println("\nFile has been recerved successfully.");os.close();is.close();s.close();}catch(Exception ex ){ex.printStackTrace();}。

java实现两台电脑间TCP协议文件传输

java实现两台电脑间TCP协议文件传输

java实现两台电脑间TCP协议⽂件传输记录下之前所做的客户端向服务端发送⽂件的⼩项⽬,总结下学习到的⼀些⽅法与思路。

注:本⽂参考⾃《⿊马程序员》视频。

⾸先明确需求,在同⼀局域⽹下的机器⼈A想给喜欢了很久的机器⼈B发送情书,但是机器⼈B事先并不知道⼩A的⼼思,那么作为⽉⽼(红娘)该如何帮助他们呢?然后建⽴模型并拆分需求。

这⾥两台主机使⽤⽹线直连,在物理层上确保建⽴了连接,接下来便是利⽤相应的协议将信息从电脑A传给电脑B。

在这⼀步上,可以将此过程抽象为⽹络+I/O(Input、Output)的过程。

如果能在⼀台电脑上实现⽂件之间的传输,再加上相互的⽹络协议,羞涩的A不就可以将情书发送给B了吗?因此要先解决在⼀台电脑上传输信息的问题。

为了在⽹络上传输,使⽤必要的协议是必要的,TCP/IP协议簇就是为了解决计算机间通信⽽⽣,⽽这⾥主要⽤到UDP和TCP两种协议。

当⼩A可以向⼩B发送情书后,⼜出现了众多的追求者,那么⼩B如何去处理这么多的并发任务呢?这时便要⽤到多线程的技术。

因此接下来将分别介绍此过程中所⽤到了I/O流(最基础)、⽹络编程(最重要)、多线程知识(较重要)和其中⼀些⼩技巧。

⼀、I/O流I/O流⽤来处理设备之间的数据传输,Java对数据的传输通过流的⽅式。

流按操作数据分为两种:字节流与字符流。

如果数据是⽂本类型,那么需要使⽤字符流;如果是其他类型,那么使⽤字节流。

简单来说,字符流=字节流+编码表。

流按流向分为:输⼊流(将硬盘中的数据读⼊内存),输出流(将内存中的数据写⼊硬盘)。

简单来说,想要将某⽂件传到⽬的地,需要将此⽂件关联输⼊流,然后将输⼊流中的信息写⼊到输出流中。

将⽬的关联输出流,就可以将信息传输到⽬的地了。

Java提供了⼤量的流对象可供使⽤,其中有两⼤基类,字节流的两个顶层⽗InputStream与OutputStream;字符流的两个顶层⽗类Reader 与Writer。

这些体系的⼦类都以⽗类名作为后缀,⽽⼦类名的前缀就是该对象的功能。

JAVA文件上传、删除、下载的通用方法总结

JAVA文件上传、删除、下载的通用方法总结
String type = uploadContentType;//上传文件类型 if("image/pjpeg".equals(type)||"image/x-png".equals(type)||"im
age/gif".equals(type)||"image/bmp".equals(type)){ File target = new File(targetDirectory, fileName); //第一个参数为你要上传的路径,第二个参数为你要上传到服务器中的文件的名字。 FileUtils.copyFile(upload, target);//上传文件的核心方法 signs = "scsuccess"; }else{ signs = "文件类型不符合要求!"; }
保存我直接用了 submit,至于其他的 js 页面限制,这个好写,我也就不多写了。
取消的话我写一下,之前这个我也不会,就是取在这里。
这段代码是写在 js 里的 代码如下:
<script type="text/javascript"> function shangchuanquxiao(){//取消的方法 var who=document.getElementById("upload"); var who2= who.cloneNode(false); who2.onchange= who.onchange;// events are not cloned who.parentNode.replaceChild(who2,who); }
this.uploadContentType = uploadContentType; } }

Java远程连接Linux服务器并执行命令及上传文件功能

Java远程连接Linux服务器并执行命令及上传文件功能

Java远程连接Linux服务器并执⾏命令及上传⽂件功能最近再开发中遇到需要将⽂件上传到Linux服务器上,⾄此整理代码笔记。

此种连接⽅法中有考虑到并发问题,在进⾏创建FTP连接的时候将每⼀个连接对象存放⾄ThreadLocal<Ftp> 中以确保每个线程之间对FTP的打开与关闭互不影响。

package com.test.utils;import java.io.BufferedInputStream;import java.io.File;import java.io.FileFilter;import java.io.FileInputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.Date;import java.util.List;import mons.logging.Log;import mons.logging.LogFactory;import com.jcraft.jsch.ChannelSftp;import com.jcraft.jsch.JSch;import com.jcraft.jsch.Session;public class Ftp {//打印log⽇志private static final Log logger = LogFactory.getLog(Ftp.class);private static Date last_push_date = null;private Session sshSession;private ChannelSftp channel;private static ThreadLocal<Ftp> sftpLocal = new ThreadLocal<Ftp>();private Ftp(String host, int port, String username, String password) throws Exception {JSch jsch = new JSch();jsch.getSession(username, host, port);//根据⽤户名,密码,端⼝号获取sessionsshSession = jsch.getSession(username, host, port);sshSession.setPassword(password);//修改服务器/etc/ssh/sshd_config 中 GSSAPIAuthentication的值yes为no,解决⽤户不能远程登录sshSession.setConfig("userauth.gssapi-with-mic", "no");//为session对象设置properties,第⼀次访问服务器时不⽤输⼊yessshSession.setConfig("StrictHostKeyChecking", "no");sshSession.connect();//获取sftp通道channel = (ChannelSftp)sshSession.openChannel("sftp");channel.connect();("连接ftp成功!" + sshSession);}/*** 是否已连接** @return*/private boolean isConnected() {return null != channel && channel.isConnected();}/*** 获取本地线程存储的sftp客户端** @return* @throws Exception*/public static Ftp getSftpUtil(String host, int port, String username, String password) throws Exception {//获取本地线程Ftp sftpUtil = sftpLocal.get();if (null == sftpUtil || !sftpUtil.isConnected()) {//将新连接防⽌本地线程,实现并发处理sftpLocal.set(new Ftp(host, port, username, password));}return sftpLocal.get();}/*** 释放本地线程存储的sftp客户端*/public static void release() {if (null != sftpLocal.get()) {sftpLocal.get().closeChannel();("关闭连接" + sftpLocal.get().sshSession);sftpLocal.set(null);}}/*** 关闭通道** @throws Exception*/public void closeChannel() {if (null != channel) {try {channel.disconnect();} catch (Exception e) {logger.error("关闭SFTP通道发⽣异常:", e);}}if (null != sshSession) {try {sshSession.disconnect();} catch (Exception e) {logger.error("SFTP关闭 session异常:", e);}}}/*** @param directory 上传ftp的⽬录* @param uploadFile 本地⽂件⽬录**/public void upload(String directory, String uploadFile) throws Exception {try {<br> //执⾏列表展⽰ls 命令channel.ls(directory);<br> //执⾏盘符切换cd 命令channel.cd(directory);List<File> files = getFiles(uploadFile, new ArrayList<File>());for (int i = 0; i < files.size(); i++) {File file = files.get(i);InputStream input = new BufferedInputStream(new FileInputStream(file)); channel.put(input, file.getName());try {if (input != null) input.close();} catch (Exception e) {e.printStackTrace();logger.error(file.getName() + "关闭⽂件时.....异常!" + e.getMessage()); }if (file.exists()) {boolean b = file.delete();(file.getName() + "⽂件上传完毕!删除标识:" + b);}}}catch (Exception e) {logger.error("【⼦⽬录创建中】:",e);//创建⼦⽬录channel.mkdir(directory);}}//获取⽂件public List<File> getFiles(String realpath, List<File> files) {File realFile = new File(realpath);if (realFile.isDirectory()) {File[] subfiles = realFile.listFiles(new FileFilter() {@Overridepublic boolean accept(File file) {if (null == last_push_date ) {return true;} else {long modifyDate = stModified();return modifyDate > last_push_date.getTime();}}});for (File file : subfiles) {if (file.isDirectory()) {getFiles(file.getAbsolutePath(), files);} else {files.add(file);}if (null == last_push_date) {last_push_date = new Date(stModified());} else {long modifyDate = stModified();if (modifyDate > last_push_date.getTime()) {last_push_date = new Date(modifyDate);}}}}return files;}}总结以上所述是⼩编给⼤家介绍的Java远程连接Linux服务器并执⾏命令及上传⽂件,希望对⼤家有所帮助如果⼤家有任何疑问欢迎给我留⾔,⼩编会及时回复⼤家的!。

用Java实现基于SOAP的XML文档网络传输及远程过程调用

用Java实现基于SOAP的XML文档网络传输及远程过程调用

用Java实现基于SOAP的XML文档网络传输及远程过程调用1. 环境配置为了运行程序,我们首先务必配置好环境:共要下载四个软件包,它们都是开源免费的。

其中,前两个是Apache的,后两个是SUN网站的,如下所示:下载后将它们分别解压缩。

分别在这四个包的解压目录中找到:xerces.jar、soap.jar、mail.jar、activation.jar(JAF的),则是四个jar文件是我们所需要的。

本机安装环境:WindowsXP(SP2) + JDK1.4.2_06 + Tomcat5.0.28 + SOAP2.3.1 配置步骤:1、安装JDK与Tomcat。

过程比较简单,这里不再详述。

2、将刚才所找到的四个jar文件复制到Tomcat的“Tomcat 5.0\common\lib”目录下,这个目录是Tomcat的默认包目录,在这个目录中的所有包在Tomcat启动时都会被自动加载。

3、将\ JDK1.4.2\lib\路径下的tools.jar也复制到Tomcat的“Tomcat5.0\common\lib”目录下。

5、注意在编写程序时,需要将所得到的四个jar文件路径设置到所使用的Java编程环境中,由于在程序中需要用到其中的类文件。

具体步骤略。

6、重启Tomcat服务。

这时Tomcat会将“Tomcat 5.0\common\lib”目录下新加入的包加载到内存中。

到此,我们已经配置好了程序运行所需要的环境。

2. 基于SOAP的XML文档网络传输SOAP规范要紧定义了四个元素:SOAP信封规范,传输与协议绑定,编码规则与一个RPC协定。

用于实现消息的网络传输。

⏹SOAP信封规范,SOAP信封规范对计算机间传递的数据如何封装定义了具体的规则。

这包含应用特定的数据,如要调用的方法名,方法参数与返回值;还包含谁将处理封装内容,失败时如何编码错误消息等信息。

⏹数据编码规则,为了交换数据,计算机务必在编码特定数据类型的规则上达成一致,SOAP也有自己的一套编码数据类型的约定。

Java简单TCP文件传输

Java简单TCP文件传输

Java简单TCP⽂件传输服务端package TCP;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .InetSocketAddress;import .ServerSocket;import .Socket;public class TCP_File_Server {public static void main(String[] args) throws Exception {/*** 创建服务端套接字*/ServerSocket ss = new ServerSocket();/*** 绑定指定端⼝*/ss.bind(new InetSocketAddress(12345));System.out.println("《《《《⽹盘开始运⾏》》》》");/*** 监听并接受客户端socket连接,并返回⼀个socket*//*** 持续接收客户端发来的信息,并交给线程处理*/while(true) {Socket socket = ss.accept();new Thread(new UpLoad(socket)).start();}}}class UpLoad implements Runnable{private Socket socket = null;public UpLoad(Socket socket) {this.socket = socket;}@Overridepublic void run() {OutputStream out = null;try {// 创建⽂件输⼊流,接收客户端的socket中的⽂件流InputStream in = socket.getInputStream();/*** 获取⽂件名长度* ⽂件格式:⽂件名长度(数字)\r\⽂件名\r\n⽂件内容\r\n* 获取⽂件名 - 读到第⼀个回车换⾏之前截取出⽂件名的长度接着读取这个长度的字节就是⽂件名* 读取数据直到遇到第⼀个回车换⾏* 每次从流中读取⼀个字节转成字符串拼到line上只要line还不是\r\n结尾就重复这个过程*/String line1 = "";byte[] by1 = new byte[1];while(!line1.endsWith("\r\n")) {in.read(by1);String str = new String(by1);line1 += str;}/*** 1.读到长度,去掉\r\n就是⽂件名字的长度* 2.parseInt():作⽤是将可分析的字符串转化为整数。

基于JAVA的FTP文件传输系统设计与开发(课程设计)

基于JAVA的FTP文件传输系统设计与开发(课程设计)

类型:课程设计基于JA V A的FTP文件传输系统设计与开发引言FTP(File Transfer Protocol)是文件传输协议的简称。

FTP 的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。

目前FTP服务器软件都为国外作品,例如Server_U、IIS,国内成熟的FTP服务器软件很少,有一些如(Crob FTP Se rver),但从功能上看来远不能和那些流行的服务器软件媲美。

下面对这些软件简单的做一个比较:IIS只适用于NT/2000/XPWindows操作系统,适合建个小型的同时在线用户数不超过10个的FTP服务器。

它对账户的管理按照Windows用户账户方式进行;比起IIS来,Server_U的管理功能强大得多,而且设置也很方便。

它是一款由Rob Beckers开发的获奖的FTP服务器软件,它功能强大又易于使用,支持9x/ME/NT/2K 等全Windows系列。

FTP服务器用户通过它用FTP协议能在internet上共享文件。

Serv-U不仅100%遵从通用FTP标准,也包括众多的独特功能可为每个用户提供文件共享完美解决方案。

它并不是简单地提供文件的下载,还为用户的系统安全提供了相当全面的保护。

例如:您可以为您的 FTP 设置密码、设置各种用户级的访问许可等等;而Crob FTP Server从功能设置上可以看出,它沿用了像Server_U等主流FTP服务器软件的基本设置;并加入了不少人性化的功能;同时支持多服务器。

(即在软件中可以在任意的有效端口上建立任意多的FTP服务器并可同时运行,各服务器间互不相干的稳定运行)应该说进步是非常大的。

并且可以应用于Windows 95/98/ME/me/N/T2000及最新的.NET操作系统上。

不过,纵观上面这些软件,它们都只能在Windows操作系统中运行,并且功能过于强大,许多功能应用于我们的考试系统的话,并没有太大的意义,而且有些也没必要,于是就需要一个专用的,而且也能通用(应用于UNIX等其他的操作系统)的FTP服务器。

java sshclient 用法

java sshclient 用法

一、什么是Java SSHClientJava SSHClient是一种用于在Java应用程序中进行远程Shell操作的工具。

它允许用户通过SSH协议连接到远程服务器,并执行命令、上传或下载文件等操作。

二、Java SSHClient的优势1. 支持多种加密算法:Java SSHClient支持多种加密算法,包括AES、3DES等,保障了通讯的安全性。

2. 灵活的配置选项:Java SSHClient提供了丰富的配置选项,可以根据需求进行定制化配置,满足不同场景的需求。

3. 易用性:Java SSHClient提供了简单易用的API,使得用户可以轻松地在Java应用程序中集成SSH功能。

三、Java SSHClient的基本用法1. 连接到远程服务器要使用Java SSHClient连接到远程服务器,首先需要创建一个SSHClient对象,并设置连接参数,如用户名、密码、服务器位置区域、端口等。

```javaSSHClient client = new SSHClient();client.connect("hostname");client.authPassword("username", "password");```2. 执行远程命令连接到远程服务器后,可以通过Session对象执行远程命令,并获取命令的执行结果。

```javaSession session = client.startSession();Command cmd = session.exec("ls -l");cmd.join();System.out.println(cmd.getOutputAsString());session.close();```3. 上传或下载文件Java SSHClient还提供了上传或下载文件的功能,可以方便地在远程服务器和本地文件系统之间进行文件传输。

Java实现跨服务器上传文件功能

Java实现跨服务器上传文件功能

Java实现跨服务器上传⽂件功能前⼏天做个项⽬,本⾝客户端和管理员端是写在⼀起的,共⽤⼀台服务器,客户上传的⽂件都是存在服务器的硬盘上的。

⽼龙提出要把客户端和管理员端分离,这时候⽤户上传的附件的存储就出现问题了。

显然,把⼤到⼏百M的apk⽂件存到数据库不现实,查了半天,在两端建⽴ftp服务器传⽂件是最快的⽅法。

具体流程是,⽤户登录外⽹客户端,上传⽂件到外⽹的服务器硬盘上,在此同时,⽂件通过外⽹服务器访问内⽹管理员服务器的ftp服务器,传到内⽹服务器的硬盘上。

这样内⽹服务器可以对上传的⽂件进⾏加密签名⼯作,之后也通过ftp的⽅式把⽂件回传到外⽹服务器硬盘上,供⽤户进⾏其他操作。

具体实现时⽤到的⼯具:Serv-U。

Serv-U是⼀个⽅便我们在windows上建⽴ftp服务器的⼯具。

下载破解后,按照步骤,设置好Ip、端⼝、账户密码、允许ftp访问的磁盘路径、操作权限等,就可以使⽤了。

IP在本机测试的时候就选127.0.0.1,内⽹测试时就选192.168.0.x。

在java项⽬中的实现,我⾃⼰写了个⼯具类,⽤到了apache的commons-net包,有上传,下载以及删除功能。

附上代码:package app.ftp;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .ftp.FTPClient;import .ftp.FTPFile;import .ftp.FTPReply;/*** FTP服务器⼯具类**/public class FTPUtils {/*** 上传⽂件⾄FTP服务器** @param url* 服务器IP地址* @param port* 服务器端⼝* @param userName* ⽤户登录名* @param password* ⽤户登录密码* @param storePath* 服务器⽂件存储路径* @param fileName* 服务器⽂件存储名称* @param is* ⽂件输⼊流* @return* <b>true</b>:上传成功* <br/>* <b>false</b>:上传失败*/public static boolean storeFile (String url, int port, String userName, String password, String storePath, String fileName, InputStream is) {boolean result = false;FTPClient ftp = new FTPClient();try {// 连接⾄服务器,端⼝默认为21时,可直接通过URL连接ftp.connect(url ,port);// 登录服务器ftp.login(userName, password);// 判断返回码是否合法if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {// 不合法时断开连接ftp.disconnect();// 结束程序return result;}// 判断ftp⽬录是否存在,如果不存在则创建⽬录,包括创建多级⽬录String s = "/"+storePath;String[] dirs = s.split("/");ftp.changeWorkingDirectory("/");//按顺序检查⽬录是否存在,不存在则创建⽬录for(int i=1; dirs!=null&&i<dirs.length; i++) {if(!ftp.changeWorkingDirectory(dirs[i])) {if(ftp.makeDirectory(dirs[i])) {if(!ftp.changeWorkingDirectory(dirs[i])) {return false;}}else {return false;}}}// 设置⽂件操作⽬录ftp.changeWorkingDirectory(storePath);// 设置⽂件类型,⼆进制ftp.setFileType(FTPClient.BINARY_FILE_TYPE);// 设置缓冲区⼤⼩ftp.setBufferSize(3072);// 上传⽂件result = ftp.storeFile(fileName, is);// 关闭输⼊流is.close();// 登出服务器ftp.logout();} catch (IOException e) {e.printStackTrace();} finally {try {// 判断输⼊流是否存在if (null != is) {// 关闭输⼊流is.close();}// 判断连接是否存在if (ftp.isConnected()) {// 断开连接ftp.disconnect();}} catch (IOException e) {e.printStackTrace();}}return result;}/*** 从FTP服务器下载⽂件⾄本地** @param url* 服务器IP地址* @param port* 服务器端⼝* @param userName* ⽤户登录名* @param password* ⽤户登录密码* @param remotePath* 服务器⽂件存储路径* @param fileName* 服务器⽂件存储名称* @param localPath* 本地⽂件存储路径* @return* <b>true</b>:下载成功* <br/>* <b>false</b>:下载失败*/public static boolean retrieveFile (String url, int port, String userName, String password, String remotePath, String fileName, String localPath) { boolean result = false;FTPClient ftp = new FTPClient();OutputStream os = null;try {// 连接⾄服务器,端⼝默认为21时,可直接通过URL连接 ftp.connect(url ,port);// 登录服务器ftp.login(userName, password);// 判断返回码是否合法if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) { // 不合法时断开连接ftp.disconnect();// 结束程序return result;}// 设置⽂件操作⽬录ftp.changeWorkingDirectory(remotePath);// 设置⽂件类型,⼆进制ftp.setFileType(FTPClient.BINARY_FILE_TYPE);// 设置缓冲区⼤⼩ftp.setBufferSize(3072);// 设置字符编码ftp.setControlEncoding("UTF-8");// 构造本地⽂件对象File localFile = new File(localPath + "/" + fileName);// 获取⽂件操作⽬录下所有⽂件名称String[] remoteNames = ftp.listNames();// 循环⽐对⽂件名称,判断是否含有当前要下载的⽂件名 for (String remoteName: remoteNames) {if (fileName.equals(remoteName)) {result = true;}}// ⽂件名称⽐对成功时,进⼊下载流程if (result) {// 构造⽂件输出流os = new FileOutputStream(localFile);// 下载⽂件result = ftp.retrieveFile(fileName, os);// 关闭输出流os.close();}// 登出服务器ftp.logout();} catch (IOException e) {e.printStackTrace();} finally {try {// 判断输出流是否存在if (null != os) {// 关闭输出流os.close();}// 判断连接是否存在if (ftp.isConnected()) {// 断开连接ftp.disconnect();}} catch (IOException e) {e.printStackTrace();}}return result;}/*** 从FTP服务器删除⽂件** @param url* 服务器IP地址* @param port* 服务器端⼝* @param userName* ⽤户登录名* @param password* ⽤户登录密码* @param remotePath* 服务器⽂件存储路径* @param fileName* 服务器⽂件存储名称* @return* <b>true</b>:删除成功* <br/>* <b>false</b>:删除失败*/public static boolean deleteFile (String url, int port, String userName, String password, String remotePath, String fileName) {boolean result = false;FTPClient ftp = new FTPClient();try {// 连接⾄服务器,端⼝默认为21时,可直接通过URL连接ftp.connect(url ,port);// 登录服务器ftp.login(userName, password);// 判断返回码是否合法if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {// 不合法时断开连接ftp.disconnect();// 结束程序return result;}// 设置⽂件操作⽬录ftp.changeWorkingDirectory(remotePath);// 设置⽂件类型,⼆进制ftp.setFileType(FTPClient.BINARY_FILE_TYPE);// 设置缓冲区⼤⼩ftp.setBufferSize(3072);// 设置字符编码ftp.setControlEncoding("UTF-8");// 获取⽂件操作⽬录下所有⽂件名称String[] remoteNames = ftp.listNames();// 循环⽐对⽂件名称,判断是否含有当前要下载的⽂件名for (String remoteName: remoteNames) {if (fileName.equals(remoteName)) {result = true;}}// ⽂件名称⽐对成功时,进⼊删除流程if (result) {// 删除⽂件result = ftp.deleteFile(fileName);}// 登出服务器ftp.logout();} catch (IOException e) {e.printStackTrace();} finally {try {// 判断连接是否存在if (ftp.isConnected()) {// 断开连接ftp.disconnect();}} catch (IOException e) {e.printStackTrace();}}return result;}public static void main(String[] args) throws FileNotFoundException {// try {// FileInputStream fis = new FileInputStream(new File("D:/Soft Storage/软件⼯具箱/HTML_Help_WorkShop_1.3_XiaZaiBa.zip"));// System.out.println(storeFile("192.168.1.2", 21, "admin", "1", "C:/Documents and Settings/Administrator/桌⾯", RandomUUID.random() + ".zip", fis)); // } catch (FileNotFoundException e) {// e.printStackTrace();// }////File file = new File("C:/Users/freed/Desktop/1.txt");//InputStream is = new FileInputStream(file);//System.out.println(storeFile("127.0.0.1", 21, "feili", "feili", "examples", "2.txt", is));//System.out.println(retrieveFile("127.0.0.1", 21, "feili", "feili", "examples/jsp", "index.html", "C:/Users/freed/Desktop"));//System.out.println(deleteFile("127.0.0.1", 21, "feili", "feili", "testpath", "1.txt"));}}需要注意的是上传⽂件的时候要将File⽂件先放⼊fileinputstream中。

IT服务行业的远程运维管理系统开发

IT服务行业的远程运维管理系统开发

咖啡馆广告标语咖啡馆广告标语在日常学习、工作抑或是生活中,大家或多或少都接触过一些经典的标语吧,标语是用简短文字写出的有宣传鼓动作用的口号,对文化起到一定的宣传作用。

那么什么样的标语才更具感染力呢?以下是小编精心整理的咖啡馆广告标语,希望能够帮助到大家。

1、舒雅静谧,诗韵悠长。

2、享受小资生活,品味悠享咖啡。

3、您品的不只是咖啡,是生活——悠享咖啡。

4、在这儿,静听花开,悠享自在!5、悠享咖啡,你想要的时尚咖啡。

6、爱你香甜味道,品你浓浓真情。

7、悠尚咖啡,让心情慢慢慢下来!8、静静的悠享咖啡,慢慢的放松心情!9、浓浓真情,悠悠我心。

10、悠享此刻咖啡的情调。

11、有你,自有好心情——悠享咖啡。

12、与你分享秘密的内心世界!13、享受悠闲,乐在其间。

14、滴滴浓香,未尽悠享——悠享咖啡。

15、悠闲时光,共享香醇。

16、闲适COFFEE伴,YOU享我真爱。

17、喝咖啡就喝地道的咖啡——悠享咖啡。

18、悠然自得,享受快乐人生。

19、悠享这一刻的轻松——悠享咖啡。

20、“啡”一般的`依恋——悠享咖啡。

21、一丝悠然,一生畅享——悠享咖啡。

22、品悠醇于齿,享浓情在心。

23、悠闲时光,享心情飞!24、你什么都不用想——悠享咖啡。

25、怡情醒脑,悠享咖啡。

26、迷醉香浓一刻,悠享小资生活。

27、悠享咖啡——喧嚣中,心灵的伊甸园!28、品悠享,品生活——悠享咖啡。

29、悠然品读,享我自在。

30、悠闲时刻,享受轻松!31、悠享咖啡,品味真情。

32、情随心动,心在悠享。

33、文艺腔调,景象生活。

34、悠闲生活,来杯悠享。

35、悠闲时光,快乐畅享。

36、啡你莫属,馨啡品味。

37、用心享受,用情交流——悠享咖啡。

38、悠适一刻,享受一生。

39、享受咖啡色的心情。

40、悠享咖啡——搅拌着等他的旋律。

41、用一杯咖啡的时间为心情放个假!42、我爱悠享,咖啡的醇香,宁静的味道。

43、让咖啡带走你的疲劳——悠享咖啡。

44、悠然馨境界,惬意品人生。

java实现动态上传多个文件并解决文件重名问题

java实现动态上传多个文件并解决文件重名问题

java实现动态上传多个⽂件并解决⽂件重名问题本⽂分为两⼤⽅⾯进⾏讲解:⼀、java实现动态上传多个⽂件⼆、解决⽂件重命名问题java供⼤家参考,具体内容如下1、动态上传多个⽂件<form name="xx" action="<c:url value='/Up3Servlet'/>" method="post" enctype="multipart/form-data"><table id="tb" border="1"><tr><td>File:</td><td><input type="file" name="file"><button onclick="_del(this);">删除</button></td></tr></table><br/><input type="button" onclick="_submit();" value="上传"><input onclick="_add();" type="button" value="增加"></form></body><script type="text/javascript">function _add(){var tb = document.getElementById("tb");//写⼊⼀⾏var tr = tb.insertRow();//写⼊列var td = tr.insertCell();//写⼊数据td.innerHTML="File:";//再声明⼀个新的tdvar td2 = tr.insertCell();//写⼊⼀个inputtd2.innerHTML='<input type="file" name="file"/><button onclick="_del(this);">删除</button>';}function _del(btn){var tr = btn.parentNode.parentNode;//alert(tr.tagName);//获取tr在table中的下标var index = tr.rowIndex;//删除var tb = document.getElementById("tb");tb.deleteRow(index);}function _submit(){//遍历所的有⽂件var files = document.getElementsByName("file");if(files.length==0){alert("没有可以上传的⽂件");return false;}for(var i=0;i<files.length;i++){if(files[i].value==""){alert("第"+(i+1)+"个⽂件不能为空");return false;}}document.forms['xx'].submit();}</script></html>遍历所有要上传的⽂件2、解决⽂件的重名的问题package cn.hx.servlet;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import mons.fileupload.FileItem;import mons.fileupload.disk.DiskFileItemFactory;import mons.fileupload.servlet.ServletFileUpload;import mons.io.FileUtils;public class UpImgServlet extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");String path = getServletContext().getRealPath("/up");DiskFileItemFactory disk =new DiskFileItemFactory(1024*10,new File("d:/a"));ServletFileUpload up = new ServletFileUpload(disk);try{List<FileItem> list = up.parseRequest(request);//只接收图⽚*.jpg-iamge/jpege.,bmp/imge/bmp,png,List<String> imgs = new ArrayList<String>();for(FileItem file :list){if(file.getContentType().contains("image/")){String fileName = file.getName();fileName = fileName.substring(stIndexOf("\\")+1);//获取扩展String extName = fileName.substring(stIndexOf("."));//.jpg//UUIDString uuid = UUID.randomUUID().toString().replace("-", "");//新名称String newName = uuid+extName; //在这⾥⽤UUID来⽣成新的⽂件夹名字,这样就不会导致重名 FileUtils.copyInputStreamToFile(file.getInputStream(),new File(path+"/"+newName));//放到listimgs.add(newName);}file.delete();}request.setAttribute("imgs",imgs);request.getRequestDispatcher("/jsps/imgs.jsp").forward(request, response);}catch(Exception e){e.printStackTrace();}}}以上实现了java多⽂件上传,解决了⽂件重名问题,希望对⼤家的学习有所帮助。

基于Java远程传输文件Tcp详细(源码+jar+exe)

基于Java远程传输文件Tcp详细(源码+jar+exe)

发送端/*2011*by小郭1•■远程文件传输import javax.swing.*;.*;import java.io.*;import java.awt.*;import java」ang.*;import java.awt.eve nt.*;public class TcpSend extends JFrame implements ActionListener {private J Button butt on;private JFileChooser chooser;//private FilelnputStream in;//private String filename;//byte[] by=new byte(lOOOOO);public TcpSend(){super("小郭文件传输发送端”);this.setBounds(10/10/400/400);this.setLayout(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);this.setVisible(true);chooser=new JFileChooser();button=new JButton("发送J;button.setFont(new Font("楷体舄Font.PLAIN,30));button.setBounds(0,0z400,400);add(butt on);butt on .addActio nListener(this);}public void actionPerformed(ActionEvent e){chooser.showOpenDialog(this);if(chooser.showOpenDialog(this)==JFileChooser.CANCEL_OPTION)button.setText("MX消文件发送”);//小bug按2次才能取消return;}Send send=new Send(chooser.getSelectedFile());send.start();button.setText(H文件已发送”);}public static void main(String[] args){n ew TcpSe nd();}}//end TcpSendclass Send extends Thread{private File file;private Socket socket;private DataOutputStream Dout;private DatalnputStream Din;BufferedlnputStream buffered;Send(File file){this.file = file;try{llll);//localhost 可以改成IP 如果是内网直接填内socket= new Socket(l,localhost,,/网IP外网的话IP要映射buffered二new BufferedlnputStream(socket.getlnputStream());//创建一个缓冲区数组,保存套接字S输入流,以便使用Din = new DatalnputStream(buffered);//数据输入流,用来读取Dout = new DataOutputStream(socket.getOutputStream());〃数据输出流,用来写入由数据输入流读取的数据} catch (lOException e) {e.printStackTrace();}}public void run(){try{Dout.writeUTF(file.getName());// 将文件名写入输出流JOptionPane.showMessageDialogfnull/1发送的文件zu:,,+file.getName());boolean isAccepted = Din.readBoolean();//接收端是否读取输入字if(isAccepted),,对方已经接受文件传输,点击确左开始传//JOptionPane.showMessageDialog(nullz输!”);BufferedlnputStream Bin = new BufferedlnputStream(new FilelnputStream(file));//创建一个缓冲区数组,保存文件输入流byte[] by = new byte[lOOOOO];int I;while(( I =Bin.read(by))!= -1)//从输入流中将各字节读取到by数组中只要不是二1如果二1即到达流末尾就跳出循环{Dout・write(byOl);〃将by数组中从偏移地址0开始的1个字节写入输出流。

file transferto 覆盖

file transferto 覆盖

file transferto 覆盖“File transfer”通常指的是文件从一个地方移动到另一个地方的过程,这可以通过复制或移动操作来完成。

至于“覆盖”,这通常是指在目标位置已经存在同名文件的情况下,新文件将替换旧文件。

如果是在谈论Java中的transferTo()方法,这个方法用于将文件从临时存储区转移到一个已存在的目标文件。

如果目标文件已经存在,它将被覆盖。

这是一个简单的示例:java复制代码File sourceFile = new File("source.txt");File destFile = new File("dest.txt");if(destFile.exists()){ destFile.delete(); // 先删除已存在的目标文件 }sourceFile.renameTo(destFile); // 转移文件在这个例子中,如果“dest.txt”已经存在,它将被“source.txt”的内容覆盖。

File destFile = new File("dest.txt");if(destFile.exists()){ destFile.delete(); // 先删除已存在的目标文件 }sourceFile.renameTo(destFile); // 转移文件在这个例子中,如果“dest.txt”已经存在,它将被“source.txt”的内容覆盖。

if(destFile.exists()){ destFile.delete( ); // 先删除已存在的目标文件 }sourceFile.renameTo(destFile); // 转移文件在这个例子中,如果“dest.txt”已经存在,它将被“source.txt”的内容覆盖。

if(destFile.exists()){ destFile.delete( ); // 先删除已存在的目标文件 }sourceFile.renameTo(destFile); // 转移文件在这个例子中,如果“dest.txt”已经存在,它将被“source.txt”的内容覆盖。

java sftp的ls方法

java sftp的ls方法

java sftp的ls方法在Java中,我们可以使用SSH库来通过SFTP(SSH File Transfer Protocol)与远程服务器进行文件传输。

其中,ls方法用于列出远程服务器上指定目录的文件和文件夹。

要使用Java SFTP库进行LS操作,首先需要建立与远程服务器的连接。

可以使用JSch库来实现这一点。

下面是一个简单的示例代码,展示如何使用Java SFTP 的LS方法:```javaimport com.jcraft.jsch.ChannelSftp;import com.jcraft.jsch.JSch;import com.jcraft.jsch.Session;public class SFTPExample {public static void main(String[] args) {String host = "your_SFTP_host";String username = "your_SFTP_username";String password = "your_SFTP_password";int port = 22;String remoteDirectory = "your_remote_directory";try {JSch jsch = new JSch();Session session = jsch.getSession(username, host, port);session.setPassword(password);session.setConfig("StrictHostKeyChecking", "no");session.connect();ChannelSftp channel = (ChannelSftp) session.openChannel("sftp");channel.connect();channel.cd(remoteDirectory);// 列出当前目录下的文件和文件夹channel.ls(".").forEach(file -> {System.out.println(file.getFilename());});channel.disconnect();session.disconnect();} catch (Exception e) {e.printStackTrace();}}}```在上述示例代码中,我们首先通过JSch库建立与SFTP服务器的连接。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

发送端/ *by小郭*远程文件传输**/import javax.swing.*;import .*;import java.io.*;import java.awt.*;import ng.*;import java.awt.event.*;public class TcpSend extends JFrame implements ActionListener{private JButton button;private JFileChooser chooser;//private FileInputStream in;//private String filename;//byte[] by=new byte[100000];public TcpSend(){super("小郭文件传输发送端");this.setBounds(10,10,400,400);this.setLayout(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);this.setVisible(true);chooser=new JFileChooser();button=new JButton("发送");button.setFont(new Font("楷体",Font.PLAIN,30));button.setBounds(0,0,400,400);add(button);button.addActionListener(this);}public void actionPerformed(ActionEvent e){chooser.showOpenDialog(this);if(chooser.showOpenDialog(this)==JFileChooser.CANCEL_OPTION){button.setText("取消文件发送");//小bug 按2次才能取消return;}Send send=new Send(chooser.getSelectedFile());send.start();button.setText("文件已发送");}public static void main(String[] args){new TcpSend();}}//end TcpSendclass Send extends Thread{private File file;private Socket socket;private DataOutputStream Dout;private DataInputStream Din;BufferedInputStream buffered;Send(File file){this.file = file;try{socket= new Socket("localhost",1111);//localhost可以改成IP 如果是内网直接填内网IP 外网的话IP要映射buffered=new BufferedInputStream(socket.getInputStream());//创建一个缓冲区数组,保存套接字s输入流,以便使用Din = new DataInputStream(buffered);//数据输入流,用来读取Dout = new DataOutputStream(socket.getOutputStream());//数据输出流,用来写入由数据输入流读取的数据} catch (IOException e) {e.printStackTrace();}}public void run(){try{Dout.writeUTF(file.getName());//将文件名写入输出流JOptionPane.showMessageDialog(null,"发送的文件是:"+file.getName());boolean isAccepted = Din.readBoolean();//接收端是否读取输入字节if(isAccepted){// JOptionPane.showMessageDialog(null,"对方已经接受文件传输,点击确定开始传输!");BufferedInputStream Bin = new BufferedInputStream(new FileInputStream(file));//创建一个缓冲区数组,保存文件输入流byte[] by = new byte[100000];int l;while(( l =Bin.read(by))!= -1)//从输入流中将各字节读取到by数组中只要不是=-1 如果=-1即到达流末尾就跳出循环{Dout.write(by,0,l);//将by数组中从偏移地址0开始的1个字节写入输出流。

Dout.flush();//清空数据输出流//l = Bin.read(by);多了这一句照成接收的文件大小只有一半的容量}Bin.close();//关闭缓冲输入流// JOptionPane.showMessageDialog(null,file.toString()+"\n文件发送完毕!");}//end if}//end trycatch (IOException e){e.printStackTrace();}finally//保证即使因为异常,try里面的代码不会被执行,但是finally里面的语句还是会执行,这样可以释放一些资源{try{Din.close();//关闭数据输入流Dout.close();//关闭数据输出流socket.close();}catch (IOException e){e.printStackTrace();}}//end finally}//end run()}//end Send(线程类)*2011接收端import javax.swing.*;import .*;import java.io.*;import java.awt.*;import ng.*;import java.awt.event.*;public class TcpReceive extends JFrame implements ActionListener {private JButton button1,button2;private JLabel label;private Socket socket;private ServerSocket ss;private String filename;public TcpReceive(){super("小郭文件传输接收端");this.setBounds(420,420,400,400);setLayout(null);setVisible(true);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);label=new JLabel();label.setText("暂时没收到文件请求,请等待。

");button1=new JButton("Accept");button2=new JButton("Cancel");add(label);add(button1);add(button2);label.setBounds(10,10,300,300);button1.setBounds(60,310,100,30);button2.setBounds(240,310,100,30);button1.addActionListener(this);button2.addActionListener(this);try{ss=new ServerSocket(1111);//绑定到端口1111的服务器套接字while(!ss.isClosed()){socket=ss.accept();//侦听并接受到此套接字的连接DataInputStream Din = new DataInputStream(socket.getInputStream());//数据输入流,用来读取从1111端口接收到的输入流filename = Din.readUTF();//读取对方发过来的字符串(即文件名)label.setText(filename);}}catch (IOException e){if(ss.isClosed())//端口关闭就退出{JOptionPane.showMessageDialog(this,"端口已关闭,程序退出");System.exit(0);}else{ e.printStackTrace();}}}//end构造函数public void actionPerformed(ActionEvent e){if(e.getSource()==button1){JFileChooser chooser=new JFileChooser();chooser.setSelectedFile(new File(filename));//路径抽象化chooser.showSaveDialog(this);chooser.getName(chooser.getSelectedFile());Receive receive = new Receive(chooser.getSelectedFile(),socket);//创建Receive线程对象用来启动线程类if(chooser.showSaveDialog(this)==JFileChooser.APPROVE_OPTION)//bug:按2次保存才保存下来{//System.out.println("bbb");if(chooser.getSelectedFile().exists())//测试此抽象路径名表示的文件或目录是否存在{int over=JOptionPane.showConfirmDialog(this,"文件"+chooser.getSelectedFile().getName()+"已经存在,确定覆盖吗?","覆盖与否",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);if(over==JOptionPane.YES_OPTION)//bug:按2次确定才能执行{//else{System.out.println("aaa");}receive.start();}//end if}//end ifelse{receive.start();} //System.out.println("aaaa");} //bug:按2次取消才能取消第二次取消才打印}//end if}//end ifif(e.getSource()==button2){if(label.getText()=="暂时没收到文件请求,请等待。

相关文档
最新文档