Servletでcsvファイル読込

このQ&Aのポイント
  • Servletからのcsvファイル読み込みについて詳しく教えてください。
  • FileNotFoundExceptionが発生し、ファイルを読み込むことができません。どこにcsvファイルを置けば良いのでしょうか?
  • ファイルの置き場所を変えてもダメでした。問題の解決策を教えてください。
回答を見る
  • ベストアンサー

Servletでcsvファイル読込

Servletからcsvファイルを読込む処理を作成しています。 しかし、FileNotFoundExceptionが発生してファイルを読込めません。 下記のように記述した場合、csvファイルはどこに置けばよいのでしょうか? いろいろファイルの置き場所を変えてはやってみましたがダメでした。 package action; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class MemberEntryAction extends Action{ public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { try { // 入力ストリームを作成。 FileReader fr = new FileReader("a.csv"); BufferedReader br = new BufferedReader(fr); // 読込みループ。 String line; // 読み込まれた1行。 while( (line = br.readLine()) != null ) { System.out.println(line); } // 入力・出力ストリームを閉じる。 br.close(); fr.close(); } catch ( FileNotFoundException e ) { System.out.println("FileNotFound!"); } return mapping.findForward("memberMenu"); } }

質問者が選んだベストアンサー

  • ベストアンサー
noname#24040
noname#24040
回答No.1

FileReader fr = new FileReader("a.csv"); ファイルの位置は確かでしょうか? ルート以下にa.csvがあるなら FileReader fr = new FileReader( getServletContext.getRealPath("/a.csv"));

rallys
質問者

お礼

お礼遅れました。 ご回答ありがとうございました。 フルパス指定でもうまくいきました。

関連するQ&A

  • ActionForm form にnullが入ってくる原因

    import java.io.IOException; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public ActionForward execute( ActionMapping map , ActionForm form , HttpServletRequest request , HttpServletResponse response ) throws ServletException, IOException, ClassNotFoundException, SQLException { という記述をして このソースで落ちる原因を調べたら、ActionForm form の "form" でnullが入ってきていました。 なにか定義し忘れているのでしょうか?

    • ベストアンサー
    • Java
  • CSV読み込み 文字化け

    失礼いたします。 以前のログを見てエンコードを設定してみたのですが、出力が文字化けします。ローカルファイルを読み込んでコンソール出力しているだけなのですが・・・。 分かる方、よろしくお願いします。 -------------------ソースはここから import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; // import java.io.FileReader; FileReaderからInputStreamReaderに変更済み import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class ReadCSV { public static void main(String[] args) { try { File csv = new File("C:\\AP.csv"); // BufferedReader br = new BufferedReader(new FileReader(csv)); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"EUC_JP")); // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"MS932")); while (br.ready()) { String line = br.readLine(); StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { System.out.print(st.nextToken() + "\t"); } System.out.println(); } br.close(); } catch (FileNotFoundException e) { キャッチ処理 }

    • ベストアンサー
    • Java
  • list<クラス名> とは何でしょうか?

    JAVA初心者のものです。 新規プロジェクトに向けてJAVAの習得に励んでおり、現在は「プロになるためのWeb技術入門」という本でフレームワークについて勉強しています。 ところでその本の中で次のコードがありますが、ここで List<ProductItem> は何を意味するものでしょうか? ご存知の方は教えてください。 なお、ProductItem は別の箇所で定義されたクラス名です。 public class ItemListShowAction extends Action { /* (non-Javadoc) * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ProductLogic productLogic = new IbatisProductLogic(); List<ProductItem> productList = productLogic.getProductList(); request.setAttribute("productList", productList); return mapping.findForward("show"); } }

    • ベストアンサー
    • Java
  • Cookieへの保存

    ログイン認証システムを作成しCookieを利用しようと思うのですが Cookieへデータが保存されません。 ちなみにCookie用に付け加えたソースは ModelBean.javaで // クッキー処理 public int selectDatas(){ int userNo=0; jdbcOpen(); try{ // SQL文生成 query = "SELECT userNo FROM loginUser"; // 実行 ResultSet rs = stmt.executeQuery(query); // 結果取得 if(rs.next()){ this.userNo = rs.getInt("userNo"); } rs.close(); } catch (Exception ex) { ex.printStackTrace ();} jdbcClose(); return userNo; } ControllServlet.javaでは import myPackage.ModelBean; //サーブレット関連のクラス import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //Struts関連のクラス import org.apache.struts.action.Action; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionError; //Java関連のクラス import java.io.IOException; import java.util.ResourceBundle; //Log4j関連のクラス import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; public class ControllerServlet extends Action { // 設定ファイル private static final String APPLICATION_RESOURCE = "res.ApplicationResources"; // リソースの読み込み private static ResourceBundle rb = ResourceBundle.getBundle(APPLICATION_RESOURCE); // Log4jの設定 static Logger logger = Logger.getLogger(ControllerServlet.class); public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException , Exception { Cookie[] cookies = request.getCookies(); Integer userNo = null; if (cookies != null) { for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookie.getName().equals("userNo")) { String value = cookie.getValue(); userNo = Integer.valueOf(value); break; } } } if (userNo == null) { userNo = new Integer(0); } userNo = new Integer(userNo.intValue() + 1); Cookie cookie = new Cookie("userNo", userNo.toString()); //cookie.setMaxAge(0); response.addCookie(cookie); です。どのようにしたら保存されるようになるのでしょうか? よろしくお願いします。

  • 拡張子の読み込み制限を設けたいのですが・・・

    現在Javaのプログラム課題を行っているものです。 前回こちらで質問させていただいたのですが、 解決に至らなかったので再度質問させていただきたいと思います。 前回の質問→ http://okwave.jp/qa4023470.html こちらが修正後のプログラムの一部です。↓ package studyA; import java.util.*; import java.io.FileReader; import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.IOException; public class A23_StrArray extends A22_StrArray { /** * テキストファイルの読込み(上書きモード) * @param path ファイルのパス * @exception FileNotFoundException ファイルが見つからなかった場合 * IOException 入出力エラーが発生した場合 */ // 修正として付け加えた部分(開始位置) public class CheckClass check { check = new CheckClass(); check = path; public boolean accept(path) { //拡張子がtxtであるかのの判定を行います。 String ext = getExtension(path); if (ext != null && ext.equals("txt")) { return true; } } } //プログラム修正箇所 (終点) public void readFile(String path) throws Exception { try { //BufferedReader in = new BufferdReader(new FileReader()) FileReader fr = new FileReader(path); //FileReaderのインスタンスを作成 BufferedReader br = new BufferedReader(fr); //BufferedReaderのインスタンスを作成 String line; list.clear(); //リストをクリア while ((line = br.readLine()) != null) //要素がなくなるまで繰り返す { add(line); } System.out.println("ファイルを読み込みしました。"); br.close(); } catch(FileNotFoundException e)//ファイルが見つからなかった時 { System.out.println("ファイルが見つかりません。"); } catch(IOException e)//入出力エラーが発生した場合 { System.out.println("入出力エラーが発生しました。"); } } 現在は、コンパイルエラーでC:\Java>javac A23_StrArray.java A23_StrArray.java:28: '{' がありません。 public class CheckClass check と表示されます。一体どのように修正を加えれば、 txtのみ読み込んで、上書きなどができるプログラムを作ることができるのでしょうか?

    • ベストアンサー
    • Java
  • CSVファイルを列ごとに読み込む処理について

    はじめまして。 よろしくお願いいたします。 プログラミングに興味をもち、JAVAに触れている者です。 現在eclipseでCSVファイルを列ごとに読み込んで表示する、というプログラムを作成しているのですが、コンパイルエラーを除去することができません。 エラー内容は 「処理されない例外の型 FileNotFoundException」 です。 これを見る限りでは読み込むファイルがないということらしいのですが、CSVファイルはちゃんと作成し、作成中のプログラムのファイルがあるディレクトリに置いてあります。 原因を探したいのですが、eclipseのこともjavaのこともよくわかっていないため、まるで見当がつきません。 どうかご教示をお願いいただけませんでしょうか? 以下が作成中のプログラムです。 package ioTest; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.io.FileInputStream; public class IOsample { public static void main (String[] args){ BufferedReader br = null; File csv = new File("sampleCSV.csv"); br = new BufferedReader( new InputStreamReader( new FileInputStream(csv))); while (br.ready()){ System.out.println(br.readLine()); } br.close(); } } レベルの低い質問で申し訳ありませんが、なにとぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • import について

    Eclipseで開発しています。 以下2点がImportでエラーになります。 import java.util.* import java.io.*; 以下はImport可です。 import java.lang.reflect.*; import javax.servlet.http.*; import org.apache.struts.action.*; import java.util.*; ライブラリーが足らないのかと思うのですが、よくわかりません ご指導願います。

    • ベストアンサー
    • Java
  • javaでCSVの中身から最大値を表示したい

    タイトルの通りなのですが、javaのプログラムでCSVの中の少数を読み込み、そこから最大値を表示したいのです。 CSVの中身は 10.1,20.2,30.3,40.4,50.4 100.1,200.2,300.3,400.4 という半角の少数がカンマで区切られた状態になっています。 import java.util.Scanner; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class test { public static void main(String args[]) throws NumberFormatException, IOException{ System.out.println("csvのファイル名を入力"); Scanner sc = new Scanner(System.in); String str = sc.next(); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(str))); String line; while((line=br.readLine())!=null){ String[] sp = line.split(","); double sum=0;//合計値格納用 for(int i=0;i<sp.length;i++){ sum += Double.parseDouble(sp[i]); } System.out.println(line+"の合計値は"+sum); } br.close(); } } 上記のプログラムは、CSVの中身の各行の合計値を算出するもので、これを元に各行の最大値を算出したいのですが、どうしても比較演算子を使用しての算出がうまくいきません。 どなたかプログラムに詳しい方がいましたら、ご教授いただけると助かります。 つたない文章ですがよろしくお願いします。

    • ベストアンサー
    • Java
  • jspでファイルの読み込み

    jspでwebサーバーにある“1.txt”ファイルを読み込んでそれを表示するプログラムを作成したのですが、エラーが出てしまいます。サーバーの環境(jsp実行環境等)は問題ありません。以下のコードで何かおかしなところがありましたら教えてください。 <%@ page contentType="text/html" import="java.util.*,java.io.*" %> <% String result = ""; String h_s = ""; FileReader h_fr = new FileReader("1.txt"); BufferedReader h_br = new BufferedReader(h_fr); while(true){ h_s = h_br.readLine(); if (h_s == null){ break; } result = result + h_s; } %> <%= result %>

    • ベストアンサー
    • Java
  • Javaのカウント方法について

    お伺い致します。 CSVで取り込んだデータの抽出をしたいのですが、方法が見出せません。どの点を直せば宜しいのでしょうか。 具体的には取り込んだ郵便番号をカウントして(例:京都市,34)CSVファイルに出力するように出したいのですがカウントがうまくできません。(以下、コメントアウトしたものがありますが、今までのソースを記載します) 宜しく御願いします。 import java.io.FileReader; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.*; public class test01 { static String fname ="26KYOUTO.CSV"; public static void main(String[] args){ if(args.length>0) fname = args[0]; try { BufferedReader reader = new BufferedReader(new FileReader(fname)); BufferedWriter pw = new BufferedWriter(new PrintWriter("orig.txt")); String line = reader.readLine(); System.out.println(line); pw.println(""); int n = 0; int count = 0; _/* while(true) { String line = reader.readLine(); if(line.equals("26101")) break; count++; } */ reader.close(); System.out.println("京都府北区=" +count ); } catch(FileNotFoundException e) { System.out.println("ファイルがありません。"); } catch(IOException e) { System.out.println("入出力エラーです。"); } } }

    • ベストアンサー
    • Java