Java 网络文件传输

java网络编程怎样实现文件传输? 设计一个简单的文件传输程序,服务器接受文件,客户端发送文件,设计一个简单的文件传输协议,比如,先传输文件名,再传输文件大小,再传输文件内容。 设计不合理。 一个文件信息,不需要分成几个包来来回回请求应答。 协议格式类似如下: 8位数据包总长+3位文件名长度+文件名+8位文件内容长度+文件内容 以上为变长报文格式,举例如下: 00001048+008+test.txt+00001024+文件内容 要么像2L所定义的协议那样发送,简单 要么就像你期望的那样,定义协议位数据长度(固定长度)+数据类型(.. 阅读详情

Java 网络文件传输

作者: 何双江

 

关键字: Java  何双江  IO  NET  File

 

读者范围:

本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解.

 

正文:

关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论:

 

 

图1:

分析图1我们基本可以知道从服务器文件系统中通过流把文件中的数据写入到服务器的进程中,然后把进程中的数据通过网络IO系统传递到客户机,这个阶段,网络中的数据以字节流的形式保存.当该字节流被客户进程接受后,客户进程通过客户本地文件流写入客户本地的文件系统中.

 

根据以上分析,我们基本可以确定我所需要处理的问题了.首先我们需要可以对本地文件系统IO操作的操作接口,然后是一个可以对网络IO系统进行操作的操作接口,已经一个可以把数据包装成字节流的操作接口,他们分别可以提供客户和服务器两个进程进行读写的操作.如下图所示:



图
2:

根据以上分析,我们可以把问题归结到对以下编程接口的需求上:

1.         字节包装器和字节解包器,

2.         网络传输器和网络接收器

3.         本地文件读/写器

 

而这些Java本身的API就已经提供.他们都被包装到java.io和java.net这两个包里,这里我提供一个基于TCP/IP的实现版本,使用基于连接的方式来完成工作.我们首先介绍几个相关的JDK中的类来完成以上任务,

1.       DataOutputStream和DataInputStream实现类提供了上面的字节包装和解包器的实现

2.       ServerSocket和Socekt提供了基于连接的网络传输和接受接口

3.       File,FileInputStream和FileOutputStream提供了基本的本地文件输入输出接口.

 

 

服务器端实现代码:

import java.io.*;

import java.net.*;

 

public class FileServer{

       public static void main(String[] args)throws Exception{

              //创建文件流用来读取文件中的数据

              File file=new File("lishengjie.jpg");

              FileInputStream fos=new FileInputStream(file);

             

              //创建网络服务器接受客户请求

              ServerSocket ss=new ServerSocket(3108);

              Socket client=ss.accept();

             

              //创建网络输出流并提供数据包装器

              OutputStream netOut=client.getOutputStream();

              OutputStream doc=new DataOutputStream(new BufferedOutputStream(netOut));

             

              //创建文件读取缓冲区

              byte[] buf=new byte[2048];

              int num=fos.read(buf);

              while(num!=(-1)){//是否读完文件

                     doc.write(buf,0,num);//把文件数据写出网络缓冲区

                     doc.flush();//刷新缓冲区把数据写往客户端

                     num=fos.read(buf);//继续从文件中读取数据

              }

              fos.close();

              doc.close();

       }

}

 

客户方实现代码:

import java.io.*;

import java.net.*;

 

public class FileClient{

       public static void main(String[] args)throws Exception{

              //使用本地文件系统接受网络数据并存为新文件

              File file=new File("newFile.jpg");

              file.createNewFile();

              RandomAccessFile raf=new RandomAccessFile(file,"rw");

             

              // 通过Socket连接文件服务器

              Socket server=new Socket(InetAddress.getLocalHost(),3108);

             

              //创建网络接受流接受服务器文件数据

              InputStream netIn=server.getInputStream();

              InputStream in=new DataInputStream(new BufferedInputStream(netIn));

             

              //创建缓冲区缓冲网络数据

              byte[] buf=new byte[2048];

              int num=in.read(buf);

             

              while(num!=(-1)){//是否读完所有数据

                     raf.write(buf,0,num);//将数据写往文件

                     raf.skipBytes(num);//顺序写文件字节

                     num=in.read(buf);//继续从网络中读取文件

              }

              in.close();

              raf.close();

       }

}

归结以上代码:

服务器

客户端

1.       服务器从本地文件系统读取文件

2.       服务器创建网络服务连接

3.       服务器提供数据包装器

4.       服务器将本地文件写入数据包装器

5.       服务器通过包装器写入到网络

1.       客户端建立新文件准备存储来自网络的数据

2.       客户端连接服务器

3.       客户端通过网络接受服务器数据并进行数据解包

4.       客户端将数据写入缓冲区

5.       客户端从缓冲区把数据写入客户本地文件

 

总结:

       事实上java的开发环境为我们提供大多数的编程接口,为我们简化了开发工作量.我们通过java的IO接口所提供的文件,数据包装器等接口非常方便的解决了我们上面的开发工作量.同时在java的net接口所提供的套接字也使得基于连接的数据接受和发送成为非常容易的工作.

java实现文件传输(附完整源码) 阅读详情

相关推荐

Java实现文件传输

在Java编程中,我们可以使用各种方法实现文件传输。文件传输是将文件从一个位置传输到另一个位置的过程,可以用于各种应用场景,如文件备份、文件共享等。下面我将介绍一种基于Socket的Java文件传输实现方法。首先,我们需要建立一个服务器和一个客户端来进行文件传输。服务器将监听来自客户端的连接请求,并接收文件数据,而客户端将连接到服务器并发送文件数据。客户端连接到服务器后,将指定的文件数据发送给服务器。在实际应用中,你可能需要添加更多的错误处理和安全性措施,例如校验文件完整性、处理并发连接等。

CyberLancer的博客 596

内网java_java 实现局域网文件传输的实例

java 实现局域网文件传输的实例本文主要实现局域网文件传输的实例,对java 的TCP知识,文件读写,Socket等知识的理解应用,很好的实例,大家参考下,实现代码:ClientFile.java/*** 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com* @author 小沫*/package com.tcp.file;import java.io.File;import ...

weixin_35897853的博客 1054

java写的局域网文件传输系统

java写的局域网文件传输系统,j2se的简单应用

循序渐进Socket网络编程(多客户端、信息共享、文件传输)

1、TCP/IP协议   既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输。这里就要使用到TCP/IP协议。   TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TCP协议组成。IP层负责网络主机的...

chenyue1458的博客 457

2024广东省职业技能大赛云计算——集群部署GitLab

题目是这样的:在Kubernetes集群中新建命名空间gitlab-ci,将GitLab部署到该命名空间下,Deployment和Service名称均为gitlab,以NodePort方式将80端口对外暴露为30880,设置GitLab服务root用户的密码为admin@123,将项目包demo-2048.tar.gz导入到GitLab中并命名为demo-2048。GitLab是一个功能强大且灵活的 DevOps 平台,为开发团队和企业提供了从代码管理到持续集成、交付和部署的一整套解决方案。

kuuuugua的博客 4396

从FinFET到NanoSheet:一文看懂TSMC制程技术的架构革命与性能飞跃

本文深入解析了TSMC从FinFET到NanoSheet的制程技术架构革命。FinFET通过三维立体结构解决了短沟道效应,而NanoSheet采用环绕栅极设计,实现了更强的静电控制与设计灵活性,结合EUV光刻技术,共同推动了芯片性能与能效的飞跃,为下一代AI与高性能计算奠定基石。

i3j4k5的博客 291

Java网络文件传输

Java 网络文件传输 Java 网络文件传输读者范围:本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解.正文:关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论:图1:分析图1我们基本可以知道从

MyObject的专栏 1702

用Python+OpenCV给斗地主做个‘外挂’:手把手教你写个桌面记牌器(附源码)

本文详细介绍了如何使用Python和OpenCV开发一个智能斗地主记牌器,包括环境搭建、图像采集与预处理、扑克牌识别技术及PyQt5界面设计。通过实战案例,帮助开发者掌握图像处理与界面开发的结合应用,提升游戏辅助工具的编写能力。

weixin_29079643的博客 546

java file 网络文件_Java 网络文件传输

读者范围:本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解.正文:关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论:图1:分析图1我们基本可以知道从服务器文件系统中通过流把文件中的数据写入到服务器的进程中,然后把进程中的数据通...

weixin_30956665的博客 1370

ZynqMP多核实战:如何让A53-0跑Linux,其他核裸机处理大数据(附完整配置流程)

本文详细解析了Xilinx ZynqMP多核异构计算实战,重点介绍如何配置A53-0运行Linux系统,同时让其他A53和R5核心以裸机方式处理大数据任务。内容涵盖内存划分、核间通信、Linux定制配置等关键技术,提供完整的配置流程和性能优化方案,助力开发者实现高效的多核协同开发。

weixin_30555125的博客 480

Oracle数据库安装图文教程 附百度云oracle Database 11g 安装包

一,Oracle数据库安装包下载 1.从Oracle官网下载所需的数据库安装包【下载需要注册登录Oracle账户】     http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 2.此处有下载好的Oracle Database 11g Release 2  百度云网盘  提取码:z...

向来如此,就一定是对的吗 6万+

基于JAVA的网络编程——socket文件传输

基于JAVA的网络编程——socket文件传输 文章目录基于JAVA的网络编程——socket文件传输效果图步骤文件结构实现代码 效果图 步骤 客户端实现步骤: 1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源 2.创建一个客户端Socket对象 ,构造方法中绑定服务器的IP地址和端口号 3.使用Socket中的方法getOutputStream,获取网络字节输出流0utputStream对象 4.使用本地字节输入流FileInputstream对象中的方法rea

Gowi的博客 1958

手把手教你学基带SOC芯片(4.2)--基带soc芯片的存储器设计

基带 SoC 中的存储器设计需要综合考虑功耗、成本和性能等因素。SRAM 适合高速缓存,DRAM 适合主内存,Flash 存储器适合非易失性存储。通过优化存储单元设计、阵列布局和外围电路,可以提高存储器的性能和效率。

MHD0815的博客 350

(转)Java 网络文件传输

<br /><br /> <br />Java 网络文件传输<br /><br />觉得写的挺好,就转过来了。<br />本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解.<br />正文:<br />关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论:<br />图1:<br />分析图1我们基本可以知道从服务器文件系统中通过流把文件中

crystal_86的专栏 442

SAP Joule 在顾问与开发者场景的双擎定位:Joule for Consultants 与 Joule for Developers 全面解读

SAP推出企业级AI助手Joule,分为顾问版(Joule for Consultants)和开发者版(Joule for Developers)两个版本。顾问版聚焦咨询业务,整合SAP知识库和方法论,辅助方案设计、差距分析和实施落地;开发者版嵌入开发工具链,支持代码生成、解释、测试和迁移。两者共享智能底座但面向不同场景:顾问版优化项目交付流程,开发者版提升工程效率。典型案例显示,Joule能有效缩短云转型周期,实现从业务咨询到技术落地的无缝衔接。该产品通过AI代理和知识图谱技术,为企业数字化转型提供端到端

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 355

【GlobalMapper精品教程】073:像素到点(Pixels-to-Points)从无人机图像轻松生成点云

Global Mapper v19引入的新的像素到点工具使用摄影测量原理,从重叠图像生成高密度点云、正射影像及三维模型。它使LiDAR模块成为已经功能很强大的的必备Global Mapper扩展功能。打开GlobalmapperV25.1中文版,点击【Lidar分析】→【像素到点云】,如下所示:V25之前的版本点击工具条上的【像素到点】工具:打开工具,可以【使用向导选】,或者选择【使用主窗口】,都很简单。

智慧空间实验室 1976
上一篇: 浅出Java 的Xml编程
下一篇: Jsp数据分页
yarshray
博客等级 码龄25年 72粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值