• 締切済み

jspでの二次元配列

こんにちは。初めて質問させていただきます。よろしくお願いします。 現在javaで作ったプログラムをjspでも使えるようにしようと考えているのですが、 二次元配列がうまくjspで反映されず困っています。 jspに関してはほとんど無知で一から勉強している次第です。 そのためなるべく簡単に、と思い 以下のプログラムを、<% %>の間に入れるだけで動かせないかと思ったのですが エラーが出てしまいました。一次元の配列ならばできたのですが... ちなみに以下のプログラムはcsvファイルを読み込み、 多次元配列に格納していくというものです。 稚拙なプログラムで申し訳ありません... どなたかご教授いただければ幸いです。 import java.io.*; import java.util.StringTokenizer; import java.util.ArrayList; class Dog{  public static void main(String args[]) throws IOException{      String csv = "dognum.csv";      BufferedReader br = new BufferedReader(new FileReader(csv)); String[][] array = new String[100][]; int i = 0; while (true) { String line = br.readLine(); if(line==null) break; array[i] = line.split(","); i++; } for (i = 0; i < 101; i++) { for (int j = 0; j < array[i].length; j++) { System.out.println("["+i+"]["+j+"] = " + array[i][j]); } } } }

みんなの回答

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 実際のところJavaとJSPはほとんど変わりませんよ。 ほとんど同じ記述でいけます。 エラーは何が出ているかが重要ですので質問する際はエラー内容を質問に含めたほうが良いです。 String[][] array = new String[100][]; で宣言しています。 しかしfor (i = 0; i < 101; i++) { にて0~100のループを行なっていますが配列が100ですと0~99になります。 <% %>のなかに入れれば基本的には動きますが、import宣言等はちょっとちがいますのでご注意ください。

mg_yuk1225
質問者

お礼

返信ありがとうございます! エラー内容も含めるべきでした。 エラーは以下のように出ています。 ------------------------- type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: Exception in JSP: /jspdir/test.jsp:9 6: 7: <% 8: String csv = "dognum.csv"; 9: BufferedReader br = new BufferedReader(new FileReader(csv)); 10: 11: String[][] array = new String[100][]; 12: int i = 0; Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 原因 java.io.FileNotFoundException: dognum.csv (指定されたファイルが見つかりません。) java.io.FileInputStream.open(Native Method) java.io.FileInputStream.<init>(Unknown Source) java.io.FileInputStream.<init>(Unknown Source) java.io.FileReader.<init>(Unknown Source) org.apache.jsp.jspdir.test_jsp._jspService(test_jsp.java:53) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:371) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) java自体はコンパイルできるのですが... JSPは以下のように記述しています。 import宣言はこのようにして大丈夫でしょうか? <%@page contentType="text/html; charset=Shift_JIS" pageEncoding="Shift_JIS"%> <%@page import="java.io.*,java.util.*,java.util.ArrayList" %> <html> <head><title>test</title></head> <body> <% String csv = "dognum.csv"; BufferedReader br = new BufferedReader(new FileReader(csv)); String[][] array = new String[100][]; int i = 0; while (true) { String line = br.readLine(); if(line==null) break; array[i] = line.split(","); i++; } for (i = 0; i < 100; i++) { for (int j = 0; j < array[i].length; j++) { System.out.println("["+i+"]["+j+"] = " + array[i][j]); } } %> </table> </body> </html>

mg_yuk1225
質問者

補足

何度も申し訳ありません。 String csv = "dognum.csv"; BufferedReader br = new BufferedReader(new FileReader(csv)); を FileReader fr = new FileReader(application.getRealPath("dognum.csv")); BufferedReader br = new BufferedReader(fr); とし、指摘していただいたループの部分を訂正したところ 無事表示させるようになりました! アドバイスとても参考になりました。 ありがとうございました。