質問編集履歴

1

kaiketu

2018/03/02 03:33

投稿

superZako
superZako

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,377 +1 @@
1
- csvファイルを読み込み、データベースに登録する処理です。
2
-
3
-
4
-
5
- わからないところは、アップロードされているCSVファイルを読み込むときに思い通りの順番通りに読み込まないところです。
6
-
7
-
8
-
9
- csvファイルは、「コード、名前、値段、個数、お気に入り」の順番ですが、実際に読み込むと「値段」から始まり、途中で(個数をbeanに保存する処理で)java.util.NoSuchElementExceptionエラーが出るところです。よろしくお願いします。
10
-
11
-
12
-
13
- 実際のエラー
14
-
15
-
16
-
17
- java.util.NoSuchElementException
18
-
19
- at java.util.StringTokenizer.nextToken(Unknown Source)
20
-
21
- at drinkMachine.csv.Registration.doPost(Registration.java:109)
22
-
23
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
24
-
25
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
26
-
27
- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
28
-
29
- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
30
-
31
- at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
32
-
33
- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
34
-
35
- at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
36
-
37
- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
38
-
39
- at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
40
-
41
- at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
42
-
43
- at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
44
-
45
- at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
46
-
47
- at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
48
-
49
- at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
50
-
51
- at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
52
-
53
- at java.lang.Thread.run(Unknown Source)
54
-
55
-
56
-
57
- ```java
58
-
59
- コード
60
-
61
-
62
-
63
- package drinkMachine.csv;
64
-
65
-
66
-
67
- import java.io.FileInputStream;
68
-
69
-
70
-
71
- import java.io.BufferedReader;
72
-
73
- import java.io.File;
74
-
75
- import java.io.FileReader;
76
-
77
- import java.io.IOException;
78
-
79
- import java.io.InputStreamReader;
80
-
81
- import java.util.List;
82
-
83
- import java.util.Iterator;
84
-
85
- import java.util.StringTokenizer;
86
-
87
-
88
-
89
- import javax.servlet.ServletException;
90
-
91
- import javax.servlet.http.HttpServlet;
92
-
93
- import javax.servlet.http.HttpServletRequest;
94
-
95
- import javax.servlet.http.HttpServletResponse;
96
-
97
-
98
-
99
- import org.apache.commons.fileupload.FileItem;
100
-
101
- import org.apache.commons.fileupload.FileUploadException;
102
-
103
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
104
-
105
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
106
-
107
-
108
-
109
- import drinkMachine.Bean.ItemBean;
110
-
111
- import drinkMachine.dao.T001ItemDao;
112
-
113
- import drinkMachine.upload.FileUpLoad;
114
-
115
-
116
-
117
- public class Registration extends HttpServlet {
118
-
119
- private static final long serialVersionUID = 1L;
120
-
121
-
122
-
123
- public Registration() {
124
-
125
- super();
126
-
127
- }
128
-
129
-
130
-
131
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
132
-
133
- DiskFileItemFactory factory = new DiskFileItemFactory();
134
-
135
- ServletFileUpload upload = new ServletFileUpload(factory);
136
-
137
-
138
-
139
- //ファイルの保存場所を示すパス
140
-
141
- String dirPath = getServletContext().getRealPath("/WebContent/csv");
142
-
143
-
144
-
145
- //アップロードする際の基準値を設定
146
-
147
- factory.setSizeThreshold(1024);
148
-
149
- upload.setSizeMax(-1);
150
-
151
- upload.setHeaderEncoding("MS932");
152
-
153
-
154
-
155
- T001ItemDao item = null;
156
-
157
- FileUpLoad up = new FileUpLoad();
158
-
159
-
160
-
161
- try {
162
-
163
- item = new T001ItemDao();
164
-
165
- //同じコードがあるかどうかを判定するフラグ
166
-
167
- boolean flag ;
168
-
169
-
170
-
171
- //Listオブジェクトとして返す
172
-
173
- @SuppressWarnings("rawtypes")
174
-
175
- List list = upload.parseRequest(request);
176
-
177
- //ファイルデータ(FileItemオブジェクト)を順に処理
178
-
179
- @SuppressWarnings("rawtypes")
180
-
181
- Iterator iterator = list.iterator();
182
-
183
-
184
-
185
- //アップロード処理
186
-
187
- //up.fileUp(iterator, dirPath);
188
-
189
-
190
-
191
- FileItem fItem = (FileItem)iterator.next();
192
-
193
- //urlが除かれているファイル名
194
-
195
- String filename = fItem.getName();
196
-
197
-
198
-
199
- //送り先のパスとファイル名
200
-
201
- File f = new File(dirPath + "/"+ filename);
202
-
203
- //1行ずつ読み込む
204
-
205
- //BufferedReader br = new BufferedReader(new FileReader(f));
206
-
207
- BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f), "MS932"));
208
-
209
-
210
-
211
- while(!(list.isEmpty())){
212
-
213
- String line;
214
-
215
- StringTokenizer token;
216
-
217
-
218
-
219
- //1行ずつ見ていく
220
-
221
- while ((line = br.readLine()) != null){
222
-
223
- //itembeanインスタンス化
224
-
225
- ItemBean bean = new ItemBean();
226
-
227
- //区切り文字","で分割
228
-
229
- token = new StringTokenizer(line, ",");
230
-
231
- int i=1;
232
-
233
- while (token.hasMoreTokens()) {
234
-
235
- while(i < 6){
236
-
237
- //何個目かに応じた処理をswitch文で記述
238
-
239
- switch(i){
240
-
241
- case 1://コード
242
-
243
- //もしコードに何も入力されてなければ自動的に連番させる
244
-
245
- if(token.nextToken() == null){
246
-
247
- bean.setCode("0");
248
-
249
- }
250
-
251
- bean.setCode(token.nextToken());
252
-
253
- System.out.println("code=="+ token.nextToken());
254
-
255
- break;
256
-
257
- case 2://商品名
258
-
259
- if(token.nextToken() == null){
260
-
261
- throw new Exception("");
262
-
263
- }
264
-
265
- String name = token.nextToken();
266
-
267
- byte[] bytes= name.getBytes("iso-8859-1");
268
-
269
- name = new String(bytes, "utf-8");
270
-
271
- bean.setName(name);
272
-
273
- System.out.println(name);
274
-
275
- break;
276
-
277
- case 3://金額
278
-
279
- bean.setPrice(token.nextToken());
280
-
281
- break;
282
-
283
- case 4://数量
284
-
285
- bean.setCount(token.nextToken());
286
-
287
- break;
288
-
289
- case 5://おすすめ
290
-
291
- bean.setIsPR(token.nextToken());
292
-
293
- break;
294
-
295
- }
296
-
297
- i++;
298
-
299
- }
300
-
301
- }
302
-
303
- //コードがDBにあるか検索
304
-
305
- flag = item.serchCode(bean.getCode());
306
-
307
- //コードを判定してDBに同じコード(true)があれば更新処理、なければ(false)新規登録処理
308
-
309
- if(flag == true){
310
-
311
- //更新処理
312
-
313
- int result = item.UpdateNoImage(bean.getCode(), bean.getName(), bean.getPrice(), bean.getCount(), bean.getIsPR());
314
-
315
- } else{
316
-
317
- //新規登録処理
318
-
319
- int result = item.RegistrationYimage(bean.getCode(), bean.getName(), bean.getPrice(), bean.getCount(), bean.getIsPR());
320
-
321
- }
322
-
323
- //更新失敗か成功かを確認
324
-
325
- }
326
-
327
- }
328
-
329
- //リスト化した情報の要素がすべてなったときに読み込みを閉じる
1
+ 今回のcsv1行ずつ読み込む処理、は解決まし。コメントださったかたありがうございました。
330
-
331
- br.close();
332
-
333
- }catch (FileUploadException e) {
334
-
335
- e.printStackTrace();
336
-
337
- request.setAttribute("Message",e);
338
-
339
- //list.jspページに戻る
340
-
341
- response.sendRedirect("list.jsp");
342
-
343
- }catch (Exception e) {
344
-
345
- e.printStackTrace();
346
-
347
- }
348
-
349
- //list.jspページに戻る
350
-
351
- response.sendRedirect("list.jsp");
352
-
353
-
354
-
355
- }
356
-
357
- }
358
-
359
- ```
360
-
361
-
362
-
363
- ```jsp
364
-
365
- コード
366
-
367
-
368
-
369
- <form action="Registration" enctype="multipart/form-data" method = "post">
370
-
371
- <input type="file" id="csv" name="csv" /></br>
372
-
373
- <input type="submit" value="csv" />
374
-
375
- </form>
376
-
377
- ```