最近在開發關于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連接失?。。。。。。。。。。。。。。。。。?quot; ); } 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