Java 也就是说,它可以改变,这取决于程序从何处执行。“更通用”的方法是使用“众所周知”的位置,例如用户的主目录。您可以使用System.getProperty(“user.home”)找到它,但每个操作系统都有自己的规则查看一些详细信息当前目录只是“.”。问题是

Java 也就是说,它可以改变,这取决于程序从何处执行。“更通用”的方法是使用“众所周知”的位置,例如用户的主目录。您可以使用System.getProperty(“user.home”)找到它,但每个操作系统都有自己的规则查看一些详细信息当前目录只是“.”。问题是,java,Java,也就是说,它可以改变,这取决于程序从何处执行。“更通用”的方法是使用“众所周知”的位置,例如用户的主目录。您可以使用System.getProperty(“user.home”)找到它,但每个操作系统都有自己的规则查看一些详细信息当前目录只是“.”。问题是项目的工作目录在哪里,这在一定程度上取决于您使用的IDE。这可能不是src,而是一个文件夹。如果您从命令行运行程序,它将与启动程序的目录相同。@Michael“我可以将文件放在项目目录中吗?”-您可以将文件放在任何需要的地方,问题是要再次找到它


也就是说,它可以改变,这取决于程序从何处执行。“更通用”的方法是使用“众所周知”的位置,例如用户的主目录。您可以使用
System.getProperty(“user.home”)
找到它,但每个操作系统都有自己的规则查看一些详细信息当前目录只是“.”。问题是项目的工作目录在哪里,这在一定程度上取决于您使用的IDE。这可能不是src,而是一个文件夹。如果您从命令行运行程序,它将与启动程序的目录相同。@Michael“我可以将文件放在项目目录中吗?”-您可以将文件放在任何需要的地方,问题是要再次找到它们。要让这类事情顺利进行,你需要解决各种各样的限制和问题。这也是一个常见的问题,不仅仅是在Java中,Java有一个相对简单的解决方案——使用“已知位置”来存储文件,假设您想要对文件进行读/写访问——这是错误的方法。操作系统制造商(Oracle)多年来一直表示,不要将应用程序数据存储在应用程序目录中。检查是否有更好的方法继续。哦,我看到@MadProgrammer已经击败了我:“使用一个“众所周知的位置”来存储文件”。Tnx用于post。主类是什么?我是java新手,但我有很多.net背景。主类是具有您调用的主方法的类。对于java初学者,我还推荐Oracle java教程,虽然它们似乎只涉及Java8,而不涉及Java11:IMHO,但这似乎是在用大锤敲碎豌豆坚果。一个更简单的解决方案是,简单地尝试解析文件的“已知”位置,该位置独立于Jar文件所在的位置或执行位置,这是一个已经在使用的常见问题和解决方案模式——只需说
public <T> List<T> readFromFile(String fileName) {

    private String partialPath = "\\HW3\\src\\java\\repos\\";

    try {
        String path = partialPath + fileName;
        FileInputStream fi = new FileInputStream(path);
        ObjectInputStream oi = new ObjectInputStream(fi);
        // Read objects
        List<T> items = (List<T>) oi.readObject();
        oi.close();
        fi.close();

        return items;
    } catch (IOException | ClassNotFoundException e) {

    }
  }
/**
 * The jar URI prefix "jar:"
 */
private static final String FULL_JAR_URI_PREFIX = "jar:";
/**
 * Length of the jar URI prefix "jar:"
 */
private static final int FULL_JAR_URI_PREFIX_LENGTH = 4;

private Path determineMainJarPath() throws URISyntaxException {
    Class<DromblerClientStarter> type = DromblerClientStarter.class;
    String jarResourceURIString = type.getResource("/" + type.getName().replace(".", "/") + ".class").toURI().
            toString();
    int endOfJarPathIndex = jarResourceURIString.indexOf("!/");
    String mainJarURIString = endOfJarPathIndex >= 0 ? jarResourceURIString.substring(0, endOfJarPathIndex)
            : jarResourceURIString;
    if (mainJarURIString.startsWith(FULL_JAR_URI_PREFIX)) {
        mainJarURIString = mainJarURIString.substring(FULL_JAR_URI_PREFIX_LENGTH);
    }
    Path mainJarPath = Paths.get(URI.create(mainJarURIString));
    return mainJarPath;
}
public String applicationPath(Class mainStartupClassName) {
    try {
        String path = mainStartupClassName.getProtectionDomain().getCodeSource().getLocation().getPath();
        String pathDecoded = URLDecoder.decode(path, "UTF-8");
        pathDecoded = pathDecoded.trim().replace("/", File.separator);
        if (pathDecoded.startsWith(File.separator)) {
            pathDecoded = pathDecoded.substring(1);
        }
        return pathDecoded;
    }
    catch (UnsupportedEncodingException ex) {
        Logger.getLogger("applicationPath() Method").log(Level.SEVERE, null, ex);
    }
    return null;
}
String appPath = applicationPath(MyMainStartupClassName.class);