Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让java使用文件的最新版本_Java_Eclipse - Fatal编程技术网

如何让java使用文件的最新版本

如何让java使用文件的最新版本,java,eclipse,Java,Eclipse,我有一个问题,我有一个程序,它编写并创建一个.java文件,然后把它放在我的包文件夹中,然后它从.java文件中获取信息,并自己使用它。(它使用我随后导入的方法创建一个新类)。 问题是,如果它在我使用eclipse更新“自创文件”之前无法工作。有没有办法让我的主文件更新为“自创文件” 对不起,如果这是重复的。我只是在任何地方都找不到它 我的代码: package dk.Nicolai.Bonde; import java.io.*; public class main { public St

我有一个问题,我有一个程序,它编写并创建一个.java文件,然后把它放在我的包文件夹中,然后它从.java文件中获取信息,并自己使用它。(它使用我随后导入的方法创建一个新类)。 问题是,如果它在我使用eclipse更新“自创文件”之前无法工作。有没有办法让我的主文件更新为“自创文件”

对不起,如果这是重复的。我只是在任何地方都找不到它

我的代码:

package dk.Nicolai.Bonde;
import java.io.*;

public class main {

public String outputString ="Math.sqrt(25)" ;
static String outputPath ="src/output.txt";
/**
 * @param args
 * @throws UnsupportedEncodingException 
 * @throws FileNotFoundException 
 */
public static void main(String[] args) throws IOException{
        new main().doit(args);
    }

public void doit(String[] args) throws IOException{
    PrintWriter writer = new PrintWriter("src/dk/Nicolai/Bonde/calculate.java", "UTF-8");
        writer.println("package dk.Nicolai.Bonde;");
        writer.println("public class calculate{");
        writer.println("public void calc(){");
        writer.println("System.out.println("+outputString+");");
        writer.println("}");    
        writer.println("}");
        writer.flush();
        writer.close();

    calculate calcObj = new calculate();
    calcObj.calc();

}
}

不,你不能。您必须在Eclipse中手动更新资源。尽管您可以为Eclipse编写一个插件来运行您的文件和更新资源


Eclipse使用目录和文件存储其资源,但不是文件系统的直接表示形式。

您的代码无法工作,因为

  • 在main的编译时需要计算。您可以在运行时提供它
  • calculate.java不会编译,因此即使是其他动态加载类的技术也无法工作

如果您想在运行时生成类,请考虑使用反射式API

,您的主要错误是,您预期在运行时自动将其编译成<代码>类< /COD>文件(SeaEng/Engult>文件(SeaEngide,例如Eclipse在您按压CTRL+S时,在后台自动为您做)。因此,情况并非如此。在运行时,您需要自己编译它,然后按加载。相关问答中给出了一个具体示例:

在具体示例中,您还将注意到,您不能只执行
new calculate()之后。类路径不会在运行时自动刷新。您需要执行一个
类#forName()
,传递FQN和
URLClassLoader
。例如

Calculate calculate = (Calculate) Class.forName("com.example.Calculate", true, classLoader);

另一个错误是,您依赖于磁盘文件系统的当前工作目录始终是Eclipse项目的源根文件夹。这是不健全的。构建和分发应用程序时,此文件夹根本不存在。您应该将文件写入IDE项目结构之外的固定/绝对文件夹。上述链接的答案中也包含了这一点。

即使他做了所有这些,他也无法像现在这样静态地引用课堂+1,但是请考虑将这些信息添加到您的答案中。但是是的,这也很重要。编辑。