最近在開發(fā)關(guān)于java讀取ftp中TXT文件,其中有些坑踩了一下,再次做個(gè)記錄
1、讀取文件時(shí)我會(huì)根據(jù)文件名稱去生成數(shù)據(jù)庫表,oracle數(shù)據(jù)庫對(duì)于表名的長度是有限制的,最多30個(gè)字符
2、對(duì)于多個(gè)文件的ftp的讀取,每次獲取文件后再次回去文件的流會(huì)為空,即在循環(huán)中多次根據(jù)ftp獲取文件的流
當(dāng)出現(xiàn)這種情況時(shí),需要在循環(huán)時(shí)每次開啟和關(guān)閉ftp的鏈接即可解決,否則在第二次獲取的時(shí)候inputsteam為null
3、讀取txt文件時(shí),如果文件中包含中文,進(jìn)行讀取時(shí)可能會(huì)出現(xiàn)亂碼,這是可設(shè)置讀取的字符集為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 ; //每行數(shù)據(jù) int rowNum = 0 ; while ((lineTxt = br.readLine()) != null ) {} |
補(bǔ)充知識(shí):Java實(shí)現(xiàn)從FTP獲取文件下載到本地,并讀取文件中的內(nèi)容的成功方法
我就廢話不多說了,大家還是直接看代碼吧~
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對(duì)象 private FTPClient ftp; //需要連接到的ftp端的ip private String ip = "10.46.249.7" ; //連接端口,默認(rèn)21 private int port = 21 ; //要連接到的ftp端的名字 private String name = "DKEDI" ; //要連接到的ftp端的對(duì)應(yīng)得密碼 private String pwd = "P@ssw0rd" ; //調(diào)用此方法,輸入對(duì)應(yīng)得ip,端口,要連接到的ftp端的名字,要連接到的ftp端的對(duì)應(yīng)得密碼。連接到ftp對(duì)象,并驗(yàn)證登錄進(jìn)入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( "~~~~~~~~~~~~~~~~~~~~~~~~本地已經(jīng)存在,下載中止" ); 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( "訂單內(nèi)容為------------------>>>>> " +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( "遠(yuǎn)程路徑為*************************" +remote); FTPFile[] files = ftp.listFiles(remote); // 通過路徑得到文件 System.out.println( "文件數(shù)量為*************************" +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\\" ); } /*//讀取文件內(nèi)容,將內(nèi)容存數(shù)據(jù)庫 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) { //抱怨單號(hào)、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 { //獲取文件、解析文件內(nèi)容,進(jìn)庫操作 this .gmRead(FTPUrl); // 關(guān)閉連接 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文件的案例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/zhang06105586/article/details/105410803