jokonem 2022-07-08 23:03 采纳率: 0%
浏览 41

关于properties绝对路径的问题,如何解决?

当前类绝对路径问题
      public class testPath {
    //读取同一文件夹下类绝对路径
    public static String main(String[] args) {
        // TODO Auto-generated method stub
         String path=(Thread.currentThread().getContextClassLoader().getResource("")).toString().substring(6);
         System.out.println(path.substring(0,(path.length()-16)));
         return path.substring(0,(path.length()-16));
    }

}  


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试合同项目查询</title>
<script>
    //function displayResult(projectnames){
    //   document.getElementById("tb_nam").value = projectnames
    //}
</script>
<style>
h1 {
    margin: auto;
    width: 50%;
    text-align: center;
    text-shadow: 5px 5px 5px lime;
}

table, td, th {
    border-collapse: collapse;
    margin: auto;
    width: 50%;
}
</style>
</head>
<body>
    <h1>测试项目查询</h1>
</body>
<form name="f1" id="f1"
    action="http://192.168.3.26:8080/gpms/readAllTable" method="post">
    <table border=1>

        <tr>
            <td colspan="2"><input type="text" name="project_name" value=""
                size=95%></td>
            <th rowspan="3" align="left"><input type="submit" value="开始查询">
            </th>
        </tr>
        <tr>
            <td><input type="radio" name="projectnames"
                onclick="displayResult(this.value)" value="report_project_2009_2021">已签订的合同项目</td>
            <td><input type="radio" name="projectnames" checked
                onclick="displayResult(this.value)" value="cgml_no_nam">已归档的成果资料</td>

        </tr>
        <tr>
            <td colspan="3">注:包含多个关键字时,用%隔开。如查询“滑坡%勘查%设计”,可以查出包含这三个词的内容。</td>
        </tr>


    </table>


</form>
</html>
package com;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class readAllTable
 */
@WebServlet("/readAllTable")
public class readAllTable extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public String porject_name = null;
    public String tb_nam = null;
    public String sql = null;

    public readAllTable() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        ResultSetMetaData data = null;
        
        //打印类所在的当前路径
        System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
        
        //读取配置文件
        Properties prop = new Properties();
        InputStream is = new BufferedInputStream(new FileInputStream(testPath.main(null)+"userInfo\\mysql80Infomation.properties"));
        System.out.println(testPath.main(null));
        prop.load(is);
        
        String driver = prop.getProperty("mysql80driver");
        String url = prop.getProperty("mysql80url");
        String user = prop.getProperty("mysql80user");
        String psw = prop.getProperty("mysql80password");
        
        response.setContentType("text/html;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        String title = "查询成果数据";
        String docType = "<!DOCTYPE html>\n";

        //new String(str.getBytes("ISO-8859-1"),"UTF-8")告诉java虚拟机,将字符串str以"ISO8859-1"编码格式读出来,转成"UTF-8"编码格式
        porject_name = "%" + new String(request.getParameter("project_name").getBytes("ISO-8859-1"),"UTF-8") + "%";
        tb_nam = request.getParameter("projectnames");
        System.out.println(porject_name);
        System.out.println(tb_nam);

        try {
            // 加载数据库驱动
            Class.forName(driver);
            System.out.println("创建驱动成功!");
        } catch (Exception e) {
            System.out.println("Class Not found!!!");
        }

        try {
            // 使用DriverManager获取数据库连接
            conn = DriverManager.getConnection(url, user, psw);

            System.out.println("连接数据库成功!");
            // 可以做成连接字串,供查看人选择要查看的字段
            sql = "SELECT * FROM gpms_db." + tb_nam + " WHERE "+prop.getProperty(tb_nam)+" LIKE " + "'" + porject_name + "'";
            // 使用Connection来创建一个SQL语句被预编译并存储在PreparedStatement对象中
            pstmt = conn.prepareStatement(sql);
            // 在此PreparedStatement对象中执行 SQL 查询,并返回该查询生成数据的单个 ResultSet 对象
            rs = pstmt.executeQuery();
            // 获取ResultSet对象列信息
            data = rs.getMetaData();

        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        out.println(docType + "<html>\n" + "<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n"
                + "<body bgcolor=\"lime\">\n" + "<h1 align=\"center\">" + title + "</h1>\n"
                + "<form  action=\"http://localhost:8080/gpms/index.html\" method=\"post\">\n"
                + "<input type=\"submit\" value=\"继续查询项目\">\n" + "</form>\n"
                + "<table width=\"100%\" border=\"1\" align=\"center\">\n" + "<tr bgcolor=\"lime\">\n");
        try {
            // 读取表头名称,并写入表格
            for (int i = 1; i <= data.getColumnCount(); i++) {
                out.print("<th>" +new String(prop.getProperty(data.getColumnName(i)).getBytes("ISO-8859-1"),"UTF-8") + "</th>");
            }
            out.println("</tr>\n");
            // 读取表的数据,并写入表格
            while (rs.next()) {
                out.println("<tr>");
                for (int i = 1; i <= data.getColumnCount(); i++) {
                    out.print("<td>" + rs.getString(i) + "</td>\n");
                }
                out.print("</tr>");
            }
            out.println("</table>\n\n</body>\n</html>");

        } catch (SQLException e) {
            e.printStackTrace();
        }
        is.close();
        out.flush();
        out.close();
        try {
            rs.close();
            conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

运行结果

HTTP状态 500 - 内部服务器错误


类型 异常报告

消息 D:\WorkSpace2022.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gpms\userInfo\mysql80Infomation.properties (系统找不到指定的路径。)

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

java.io.FileNotFoundException: D:\WorkSpace2022.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gpms\userInfo\mysql80Infomation.properties (系统找不到指定的路径。)
java.base/java.io.FileInputStream.open0(Native Method)
java.base/java.io.FileInputStream.open(FileInputStream.java:211)
java.base/java.io.FileInputStream.(FileInputStream.java:153)
java.base/java.io.FileInputStream.(FileInputStream.java:108)
com.readAllTable.doPost(readAllTable.java:67)
javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
):注意 主要问题的全部 stack 信息可以在 server logs 里查看


第一段代码就是先用来测试绝对路径的,不加String类型和返回值时,路径正确为:D:\WorkSpace2022\gpms\userInfo\mysql80Infomation.properties。加入返回值后又与前面一样出错
我想要达到的结果是得到绝对路径D:\WorkSpace2022\gpms\userInfo\
  • 写回答

2条回答 默认 最新

  • 专业些bug中 2022-07-09 08:28
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 7月8日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改