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 微服务之间传输文件,导致文件失真的排查处理方案在Java 微服务架构中,文件传输可能受到一些问题的影响,例如文件失真、损坏或数据丢失。

以下是一些排查和处理文件传输问题的常见方案:1. 网络稳定性检查:确保微服务之间的网络连接是稳定的。

网络不稳定可能导致文件传输中的数据包丢失或损坏。

可以使用网络诊断工具来检查网络连接的稳定性。

2. 文件传输协议和工具:确保你使用的文件传输协议和工具是稳定和可靠的。

例如,可以考虑使用HTTP 或FTP 协议,或者使用成熟的文件传输工具如Apache Camel 等。

3. 传输文件的编码和解码:确保在发送和接收端使用相同的文件编码和解码方式。

不同的编码方式可能导致文件解析时的失真。

4. 文件大小限制:检查微服务框架、中间件或文件传输工具是否有关于文件大小的限制。

大文件可能需要特殊处理,例如分片传输或使用分布式文件系统。

5. 数据校验和:在文件传输前后计算文件的校验和,例如MD5、SHA-256 等。

接收端可以验证文件的完整性,确保传输过程中没有数据损坏。

6. 日志和错误处理:在文件传输的过程中,详细记录日志以便追踪问题。

在微服务中实现良好的错误处理机制,可以更快地发现和解决问题。

7. 使用消息队列:考虑使用消息队列系统来处理文件传输。

消息队列可以提供异步传输,降低服务之间直接通信的复杂性,并提高系统的稳定性。

8. 增加重试机制:在文件传输失败时,实现重试机制,以应对临时性的网络故障。

重试机制应该有一定的延迟和次数限制,避免无限制地重试。

9. 使用分布式文件系统:考虑将文件存储在分布式文件系统中,例如Hadoop Distributed File System (HDFS) 或Amazon S3。

这样可以提高文件的可靠性和可用性。

通过组合以上一些方案,你可以更好地排查和处理在Java 微服务之间文件传输过程中可能出现的问题,确保文件传输的可靠性和完整性。

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将文件内容写入到服务器。

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

JAVA文件上传、删除、下载的通用方法总结
this.uploadFileName = uploadFileName; } public static long getSerialversionuid() {
return serialVersionUID; } public String getUploadContentType() {
return uploadContentType; } public void setUploadContentType(String uploadContentType) {
</script>
这段代码是可行的,但不知道是不是精炼的
写好 jsp 的代码,现在写后台的 action 代码:
为了方便代码整体粘贴方便快捷,我先把整体代码写出来,后面在做解释。一些简单的就直
接在注释中解释了 public class upload{
private static final long serialVersionUID = 1L; private File upload;//实际上传文件 private String uploadFileName; //上传文件名 private String uploadContentType; //上传文件类型 //首先set get 封装这四个属性
delfile.getName()); delfile.delete();
//System.out.println("删除文件成功"); }else if (delfile.isDirectory()) {
deletefile(delpath + "\\" + filelist[i]); } } file.delete(); }
</td>

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的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实现ftp服务

用java实现ftp服务

用Java来实现FTP服务器应用的详细讲解【文章摘要】根据FTP 的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。

如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作。

FTP 命令FTP 的主要操作都是基于各种命令基础之上的。

常用的命令有:◆设置传输模式,它包括ASCⅡ(文本) 和BINARY 二进制模式;◆目录操作,改变或显示远程计算机的当前目录(cd、dir/ls 命令);◆连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接;◆发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机;◆获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。

编程思路根据FTP 的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。

如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作。

编程技巧说明1.主函数设计在主函数中,完成服务器端口的侦听和服务线程的创建。

我们利用一个静态字符串变量initDir 来保存服务器线程运行时所在的工作目录。

服务器的初始工作目录是由程序运行时用户输入的,缺省为C盘的根目录。

具体的代码如下:public class extends Thread{private Socket socketClient;private int counter;private static String initDir;public static void main(String[] args){if(args.length != 0) {initDir = args[0];}else{ initDir = "c:";}int i = 1;try{System.out.println(" started!");//监听21号端口ServerSocket s = new ServerSocket(21);for(;;){//接受客户端请求Socket incoming = s.accept();//创建服务线程new (incoming,i).start();i++;}}catch(Exception e){}}2. 线程类的设计线程类的主要设计都是在run()方法中实现。

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

发送端/*2011*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(线程类)接收端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()=="暂时没收到文件请求,请等待。

相关文档
最新文档