重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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件)

//パスを含む名前が指定された場合はエラー文を出力します


else {
out.println("パスが指定されています");
}
というのは変です。
フルパスを指定しないと読めないと思います。
    • good
    • 0

「ファイルが存在すれば」とは、


どのディレクトリの中であるか明示的に指定しましょう
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 …
    • good
    • 0

ファイル名がフルパスではないのでは?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!