- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章EDI中JAVA通过FTP工具实现文件上传下载实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近接手一个EDI项目,收获颇多。其实我在第一家公司是接触过EDI的,当初我们用EDI主要实现了订单数据传输,客户向我们下达采购订单,通过VPN及FTP工具将采购订单以约定的报文形式放到指定的文件服务器中,然后我们EDI系统会定时去文件服务器中获取报文,最后解析并生成我们的销售订单。这些年过去了,我仍记着当初用的最多的是EDI850、EDI855.
1、首先介绍一下EDI的概念 。
Electronic data interchange,电子数据交换.
EDI其实就是把原来纸质的订单/发货通知等业务单据,从传真/快递等传统方式,变成在线的电子数据方式进行交互,从而提高业务效率。同时,通过一些EDI软件的实施配置,往往可以直接从企业的业务系统生成出相应的单据数据,并自动传送至客户/供应商处,实现Application to Application的效果,避免纸质单据中人为造成的错误(如数据错误等)。所以IT系统完善的大公司更喜欢EDI,因为EDI对于业务人员是透明的,业务人员操作自己日常的业务系统就可以了.
EDI依赖于几个部分:
1、EDI传输途径,一般EDI通过AS2协议、FTP/S等进行直联,也可以通过第三方的VAN(增值网)服务商中转(这个和我们使用电子邮件的模式相同)。因为涉及到业务信息,传输安全要求会比较高; 。
2、EDI标准,即业务数据的组织形式,目前最常用的美标的ANSI X12和联合国和欧盟的EDIFact,当然还有很多其他标准,只要EDI双方遵循同一标准,就可以很好的实现EDI交互; 。
3、两端的EDI软件(环境),一般最好的实现方式是由EDI软件自动收发EDI报文(数据文件),并自动集成到企业业务系统中.
其中传输途径中,我们采用的是FTP进行文件传输的,这里我主要介绍一下Java是如何通过FTP工具进行文件的上传与下载,这里我们的FTP服务器是Linux操作系统.
2、JAVA架包引用 。
其中“commons-net-1.4.1.jar”、“jakarta-oro-2.0.8.jar”点击链接均可直接下载,并且确保是可以用的,大家可以放心下载.
3、文件路径 客户端需要上传的文件夹路径"E:\edi\edi850",默认是将该文件夹下所有文件上传 。
FTP服务器端上传路径为“/home/test/edi850”,如果上传为路径则FTP服务器会建立对应同样的路径 。
。
4、JAVA代码 FTP类 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
45
46
47
48
49
|
package
com.pcmall;
public
class
Ftp {
private
String ipAddr;
// ip地址
private
Integer port;
// 端口号
private
String userName;
// 用户名
private
String pwd;
// 密码
private
String path;
// 路径
public
String getIpAddr() {
return
ipAddr;
}
public
void
setIpAddr(String ipAddr) {
this
.ipAddr = ipAddr;
}
public
Integer getPort() {
return
port;
}
public
void
setPort(Integer port) {
this
.port = port;
}
public
String getUserName() {
return
userName;
}
public
void
setUserName(String userName) {
this
.userName = userName;
}
public
String getPwd() {
return
pwd;
}
public
void
setPwd(String pwd) {
this
.pwd = pwd;
}
public
String getPath() {
return
path;
}
public
void
setPath(String path) {
this
.path = path;
}
}
|
FtpUtil类 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
package
com.pcmall;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.io.OutputStream;
import
org.apache.commons.net.ftp.FTPClient;
import
org.apache.commons.net.ftp.FTPFile;
import
org.apache.commons.net.ftp.FTPReply;
import
org.apache.log4j.Logger;
public
class
FtpUtil {
private
static
Logger logger = Logger.getLogger(FtpUtil.
class
);
private
static
FTPClient ftp;
/**
* 获取ftp连接
*
* @param f
* @return
* @throws Exception
*/
public
static
boolean
connectFtp(Ftp f)
throws
Exception {
ftp =
new
FTPClient();
boolean
flag =
false
;
int
reply;
if
(f.getPort() ==
null
) {
ftp.connect(f.getIpAddr(),
21
);
}
else
{
ftp.connect(f.getIpAddr(), f.getPort());
}
ftp.login(f.getUserName(), f.getPwd());
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
reply = ftp.getReplyCode();
if
(!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return
flag;
}
ftp.changeWorkingDirectory(f.getPath());
flag =
true
;
return
flag;
}
/**
* 关闭ftp连接
*/
public
static
void
closeFtp() {
if
(ftp !=
null
&& ftp.isConnected()) {
try
{
ftp.logout();
ftp.disconnect();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
/**
* ftp上传文件
*
* @param f
* @throws Exception
*/
public
static
void
upload(File f)
throws
Exception {
if
(f.isDirectory()) {
ftp.makeDirectory(f.getName());
ftp.changeWorkingDirectory(f.getName());
String[] files = f.list();
for
(String fstr : files) {
File file1 =
new
File(f.getPath() +
"/"
+ fstr);
if
(file1.isDirectory()) {
upload(file1);
ftp.changeToParentDirectory();
}
else
{
File file2 =
new
File(f.getPath() +
"/"
+ fstr);
FileInputStream input =
new
FileInputStream(file2);
ftp.storeFile(file2.getName(), input);
input.close();
}
}
}
else
{
File file2 =
new
File(f.getPath());
FileInputStream input =
new
FileInputStream(file2);
ftp.storeFile(file2.getName(), input);
input.close();
}
}
/**
* 下载链接配置
*
* @param f
* @param localBaseDir
* 本地目录
* @param remoteBaseDir
* 远程目录
* @throws Exception
*/
public
static
void
startDown(Ftp f, String localBaseDir,
String remoteBaseDir)
throws
Exception {
if
(FtpUtil.connectFtp(f)) {
try
{
FTPFile[] files =
null
;
boolean
changedir = ftp.changeWorkingDirectory(remoteBaseDir);
if
(changedir) {
ftp.setControlEncoding(
"GBK"
);
files = ftp.listFiles();
for
(
int
i =
0
; i < files.length; i++) {
try
{
downloadFile(files[i], localBaseDir, remoteBaseDir);
}
catch
(Exception e) {
logger.error(e);
logger.error(
"<"
+ files[i].getName() +
">下载失败"
);
}
}
}
}
catch
(Exception e) {
logger.error(e);
logger.error(
"下载过程中出现异常"
);
}
}
else
{
logger.error(
"链接失败!"
);
}
}
/**
*
* 下载FTP文件 当你需要下载FTP文件的时候,调用此方法 根据<b>获取的文件名,本地地址,远程地址</b>进行下载
*
* @param ftpFile
* @param relativeLocalPath
* @param relativeRemotePath
*/
private
static
void
downloadFile(FTPFile ftpFile, String relativeLocalPath,
String relativeRemotePath) {
if
(ftpFile.isFile()) {
if
(ftpFile.getName().indexOf(
"?"
) == -
1
) {
OutputStream outputStream =
null
;
try
{
File locaFile =
new
File(relativeLocalPath
+ ftpFile.getName());
// 判断文件是否存在,存在则返回
if
(locaFile.exists()) {
return
;
}
else
{
outputStream =
new
FileOutputStream(relativeLocalPath
+ ftpFile.getName());
ftp.retrieveFile(ftpFile.getName(), outputStream);
outputStream.flush();
outputStream.close();
}
}
catch
(Exception e) {
logger.error(e);
}
finally
{
try
{
if
(outputStream !=
null
) {
outputStream.close();
}
}
catch
(IOException e) {
logger.error(
"输出文件流异常"
);
}
}
}
}
else
{
String newlocalRelatePath = relativeLocalPath + ftpFile.getName();
String newRemote =
new
String(relativeRemotePath
+ ftpFile.getName().toString());
File fl =
new
File(newlocalRelatePath);
if
(!fl.exists()) {
fl.mkdirs();
}
try
{
newlocalRelatePath = newlocalRelatePath +
'/'
;
newRemote = newRemote +
"/"
;
String currentWorkDir = ftpFile.getName().toString();
boolean
changedir = ftp.changeWorkingDirectory(currentWorkDir);
if
(changedir) {
FTPFile[] files =
null
;
files = ftp.listFiles();
for
(
int
i =
0
; i < files.length; i++) {
downloadFile(files[i], newlocalRelatePath, newRemote);
}
}
if
(changedir) {
ftp.changeToParentDirectory();
}
}
catch
(Exception e) {
logger.error(e);
}
}
}
public
static
void
main(String[] args)
throws
Exception {
Ftp ftp =
new
Ftp();
ftp.setIpAddr(
"192.168.16.128"
);
ftp.setUserName(
"test"
);
ftp.setPwd(
"123456"
);
FtpUtil.connectFtp(ftp);
File file =
new
File(
"E:/edi/edi850/"
);
//如果是路径则将上传该路径下所有文件,如果是文件则上传该文件
FtpUtil.upload(file);
// 把文件上传在ftp上
FtpUtil.startDown(ftp,
"E:/FTPTEST/"
,
"/home/test/edi850"
);
// 下载ftp文件测试,第二个参数为客户端下载地址,第三个参数为文件服务器下载路径
System.out.println(
"ok"
);
}
}
|
上传成功后,FTP文件服务器文件情况如下 。
下载成功后,客户端文件如下 。
打开后,文件内容如下 。
好了,EDI中如何通过FTP工具进行文件的上传与下载先介绍到这里,以上代码本人均亲自测试,可以运行.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
最后此篇关于EDI中JAVA通过FTP工具实现文件上传下载实例的文章就讲到这里了,如果你想了解更多关于EDI中JAVA通过FTP工具实现文件上传下载实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这个问题在这里已经有了答案: Android ADT version required 20.0.0 and above (10 个答案) 关闭 9 年前。 我刚刚安装了 Eclipse Juno
按照 This page from codeplex 上的指南进行操作后,我无法在我的工具/选项窗口中看到 Python 选项。我认为我与指南的唯一偏差是: 发行版:没有安装 activestate
我有一个非常大的 .sql 脚本。我将此脚本添加到 Visual Studio 2013 下的 SQL Server 项目中。当我尝试构建它时,我收到此错误消息 This T-SQL script e
当我在SpringBoot项目中想加个依赖,但是不确定现有依赖的依赖的依赖.....有没有添加过这个依赖,怎么办呢?如果添加过了但是不知道我需要的这个依赖属于哪个依赖的下面,怎么查呢? IDEA中提供
我正在做一个项目来减少 PDF 的大小,压缩它们。我想知道市场上是否有任何非常好的工具/库(.NET)。 我确实尝试了一些像 Onstream Compression 这样的工具,但结果并不令人满意。
我想从我的源代码编译一个安卓内核。 但我想使用工具或类似的东西。 所以我只需单击一个按钮并获得一个可闪存的 zip 文件... 有工具吗? 我可以用脚本来做吗? 谢谢! 最佳答案 这取决于您从哪里获得
我们生成 pdf 文件,其中包含有关数万名客户每月财务余额的数据。在高峰期(年底有 100.000 个文件),使用在 5 台服务器之间分配负载,该过程可能需要长达 5 天的时间才能完成。工作负载的分配
模块:xmllib xmllib 是一个非验证的低级语法分析器。应用程序员使用的 xmllib 可以覆盖 XMLParser 类,并提供处理文档元素(如特定或类属标记,或字符实体)的方法。从 Py
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 3 年前。
我在一家医疗保健公司工作,拥有有关患者位置(地址、城市、州、 zip )的信息。我试图确定有多少百分比的患者住在离 5 个特定位置最近的地方。我正在寻找的答案是“25% 的患者住在离#1 地点最近的地
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 4年前关闭。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
请问我在哪里可以得到 SvcTraceViewer 工具? 我尝试下载并安装许多 SDK。 我查看了程序文件的垃圾箱。 我需要它来跟踪我的 WCF 调用出了什么问题。 最佳答案 您可以通过下载 Win
我正在尝试在我最喜欢的编辑器中设置适当的代码完成功能,我们将其称为AnEditor,以避免互联网上充斥着特定于程序的答案。 (您知道语言是ALanguage。)编辑器具有两个我喜欢的功能:它既可以在控
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
当 merge 的两个分支对同一文件有更改时,Mercurial 是否总是使用外部 merge 工具? 或者它是否首先查看它是否可以 merge 文件本身,如果不能,则仅转向外部工具? 我问的原因是我
我正在为我使用的编辑器编写 Scala 插件,该插件将突出显示所有未使用的代码路径(可能未使用 defs 、 vals 、 classes 和 implicits ),并为用户提供一个选项以将它们从.
我有 jquery 工具滚动器...我喜欢它只为 swipeLeft swipeRight 实现触摸选项。 当我使用 touch: true 时,它也会在向上/向下滑动时旋转.. 我按照此处的说明
我已经尝试了一些用于构建 UML(对象/依赖图)的 Eclipse 工具,但我真正需要的是一个工具来生成这样的代码外 UML。 (反之亦然) 我更喜欢一个简单的 UML 工具,它易于安装并且没有任何依
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我是一名优秀的程序员,十分优秀!