
getParameterでテキストファイル名のみを受け取って、
そのファイルが存在すれば中身を表示するというサーブレットを作成したのですが、
存在するファイルの名前を指定しているのにファイルが見つからず、
ローカルホストにアクセスすると
FileNotFoundExceptionとなります。
現在のコードはこちらなのですが、
どこが間違っているのかご教示いただけますと幸いです。
(不足情報ありましたらお知らせいただけますと助かります)
パスを含む指定の仕方をしたときのエラー文だけは正しく出るのですが。。。
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class test extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html><head></head><body><pre>");
//ファイル名をGetパラメータで受け取ります
String fileName = request.getParameter("fileName");
//Getパラメータで受け取ったファイル名のファイルを読み込みます
File file = new File(fileName);
FileReader filereader = new FileReader(file);
BufferedReader br = new BufferedReader(filereader);
//ファイル名を取得します
String name = file.getName();
out.println(fileName);
out.println(name);
out.println(file);
//取得したファイル名とパラメータでのファイル名が一致する場合はその中身を表示します
if (name.equals(fileName)) {
//テキストを1行ずつ読み取ります
String str = br.readLine();
//ファイルの内容の最後まで読み込みし出力します
while (str != null) {
out.println(str);
str = br.readLine();
}
filereader.close();
}
//ファイルが存在しない場合はエラー文を出力します
else if (!(file.exists())) {
out.println("ファイルが存在しません");
}
//パスを含む名前が指定された場合はエラー文を出力します
else {
out.println("パスが指定されています");
}
}
//例外を管理します
catch (FileNotFoundException e) {
out.println(e);
}
}
}
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
//パスを含む名前が指定された場合はエラー文を出力します
else {
out.println("パスが指定されています");
}
というのは変です。
フルパスを指定しないと読めないと思います。
No.2
- 回答日時:
「ファイルが存在すれば」とは、
どのディレクトリの中であるか明示的に指定しましょう
https://docs.oracle.com/javase/jp/16/docs/api/ja …
存在するかの判定は FileReader を作成する前に行いましょう
パスを含む名前の判定も同様です
ファイルの中身が読み込めるかの判定も一緒に行いましょう
https://docs.oracle.com/javase/jp/16/docs/api/ja …
https://docs.oracle.com/javase/jp/16/docs/api/ja …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
equalsの逆
-
yyyymmddからyyyy/mm/d...
-
Web上に表示されたデータをcsv...
-
csv出力について
-
Javaのカウント方法について
-
Java int sum = 0は必要ですか?
-
Javaでデータに登録する度にID...
-
Javaの質問です。テキストファ...
-
1~100までの数字を表示したい
-
C言語 重複しない4ケタの乱数...
-
オブジェクトの中のプロパティ...
-
C言語のポインターに関する警告
-
ORA-01858: 数値を指定する箇所...
-
IF関数でEmpty値を設定する方法。
-
System.err. printlnとSystem.o...
-
動的配列が存在(要素が有る)か...
-
パソコンキーボードで時分秒を...
-
ループ処理の際、最後だけ","を...
-
<forEach> 内で供給された "ite...
-
カタカナの小文字を大文字に変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
yyyymmddからyyyy/mm/d...
-
csv出力について
-
Javaでデータに登録する度にID...
-
[JAVA]エラーが解決できません。
-
Class.forNameでエラーになる
-
Java int sum = 0は必要ですか?
-
Javaの質問です。テキストファ...
-
javaプログラミングの質問です。
-
equalsの逆
-
ファイル読込みにおける改行表...
-
九九を横に表示する。
-
Servletでテキストボックスに入...
-
BufferedReaderでのエラー
-
Javaの質問です。テキストファ...
-
テキストファイルから空白行をよむ
-
文字列について(続き)
-
javaのfor文が機能してないみた...
-
Pleiades4.4でVectorの使用
-
printfを使って出力
-
ファイルの読み飛ばしが出来ま...
おすすめ情報