最近在开发关于java读取ftp中TXT文件,其中有些坑踩了一下,再次做个记录
1、读取文件时我会根据文件名称去生成数据库表,oracle数据库对于表名的长度是有限制的,最多30个字符
2、对于多个文件的ftp的读取,每次获取文件后再次回去文件的流会为空,即在循环中多次根据ftp获取文件的流
当出现这种情况时,需要在循环时每次开启和关闭ftp的链接即可解决,否则在第二次获取的时候inputsteam为null
3、读取txt文件时,如果文件中包含中文,进行读取时可能会出现乱码,这是可设置读取的字符集为UTF-8,如果不行,再试试
GB2312
4、java读取TXT文件:
1
2
3
4
5
|
InputStreamReader reader = new InputStreamReader(is, "GB2312" );
BufferedReader br = new BufferedReader(reader);
String lineTxt = null ; //每行数据
int rowNum = 0 ;
while ((lineTxt = br.readLine()) != null ) {}
|
补充知识: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
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
|
package com.aof.web.servlet;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import javax.jws.WebService;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
@WebService (endpointInterface= "com.aof.web.servlet.QualityComplainServices" )
public class QualityComplainServicesImpl implements QualityComplainServices {
//ftp对象
private FTPClient ftp;
//需要连接到的ftp端的ip
private String ip = "10.46.249.7" ;
//连接端口,默认21
private int port = 21 ;
//要连接到的ftp端的名字
private String name = "DKEDI" ;
//要连接到的ftp端的对应得密码
private String pwd = "P@ssw0rd" ;
//调用此方法,输入对应得ip,端口,要连接到的ftp端的名字,要连接到的ftp端的对应得密码。连接到ftp对象,并验证登录进入fto
public boolean ftp1() {
ftp = new FTPClient();
try {
// ftp.connect(ip, port);
if (!ftp.isConnected()){
ftp.connect(ip, port);
}
System.out.println(ftp.login(name, pwd));
// ftp.setCharset(Charset.forName("UTF-8"));
ftp.setControlEncoding( "UTF-8" );
return true ;
} catch (IOException e) {
e.printStackTrace();
return true ;
}
}
public void disconnect() throws Exception {
if (ftp.isConnected()) {
ftp.disconnect();
}
}
// 下载文件到本地
public boolean download(FTPFile file) throws Exception {
boolean result = true ;
// 本地文件路径
File f = new File( "E:\\crmFiles\\" );
if (!f.exists()) {
f.getParentFile().mkdirs();
}
long lRemoteSize = file.getSize();
try { // 下载过的不在下载了
OutputStream out = new FileOutputStream(f);
if (f.length() >= lRemoteSize) {
System.out.println( "~~~~~~~~~~~~~~~~~~~~~~~~本地已经存在,下载中止" );
out.flush();
out.close();
}
boolean iss = ftp.retrieveFile(file.getName(), out);
System.out.println( "~~~~~~~~~~~~~~~~~~~~~~~~下载成功\r\n" );
out.close();
} catch (Exception ex) {
ex.printStackTrace();
System.out.println( "~~~~~~~~~~~~~~~~~~~~~~~~下载失败\r\n" );
return false ;
}
return result;
}
private InputStreamReader read;
private BufferedReader reader;
private String preRead(String filepath) throws Exception {
File file = new File(filepath);
String ordertype = null ;
if (file.isFile() && file.exists()) {
try {
read = new InputStreamReader( new FileInputStream(file), "GBK" );
reader = new BufferedReader(read);
StringBuffer FileContent = new StringBuffer();
String temp = null ;
while ((temp = reader.readLine()) != null ) {
FileContent.append(temp);
}
System.out.println( "订单内容为------------------>>>>> " +FileContent+ " <<<<<------------------" );
} catch (FileNotFoundException e) {
System.out.println( "!!!!!!!!!!!!!!!!!没有找到合适的订单信息!!!!!!!!!!!!!!!" );
e.printStackTrace();
} finally {
reader.close();
read.close();
// file.delete();
}
}
return ordertype;
}
public void gmRead(String remote) throws Exception {
boolean downloadResult = false ;
try {
ftp.changeWorkingDirectory(remote);
System.out.println( "远程路径为*************************" +remote);
FTPFile[] files = ftp.listFiles(remote); // 通过路径得到文件
System.out.println( "文件数量为*************************" +files.length);
for ( int i = 0 ; i < files.length; i++) {
FTPFile file = files[i];
if (file.isFile()) {
downloadResult = this .download(file); // 下载文件 到本地读取路径
if (downloadResult) {
String ordertype = this .preRead( "E:\\crmFiles\\" );
}
/*//读取文件内容,将内容存数据库
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
BufferedReader br = new BufferedReader(isr);
String lineTxt = null;
while ((lineTxt = br.readLine()) != null) {
lineTxt+=lineTxt;
}
System.out.println(lineTxt);
br.close();*/
} else {
System.out.println( "************* 文件不存在 ************" );
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public String threeDAndEightDReports(String orderNum, String FTPUrl, String FileType) {
//抱怨单号、FTP地址、3D/8D文件类型
System.out.println( "1-------------" +orderNum);
System.out.println( "2-------------" +FTPUrl);
System.out.println( "3-------------" +FileType);
if ( null != orderNum && null != FTPUrl && null != FileType){
//连接FTP
boolean flag = this .ftp1();
if (flag){
try {
//获取文件、解析文件内容,进库操作
this .gmRead(FTPUrl);
// 关闭连接
this .disconnect();
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println( "!!!!!!!!!!!!!!!!!FTP连接失败!!!!!!!!!!!!!!!!!" );
}
return "success" ;
} else {
return "fail" ;
}
}
public static void main(String[] args) {
QualityComplainServicesImpl q = new QualityComplainServicesImpl();
q.threeDAndEightDReports( "001" , "/CRMINTERFACE" , "3D" );
}
}
|
以上这篇java读取ftp中TXT文件的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/zhang06105586/article/details/105410803