Java编译器: Is it possible to feed in variables on run

标签 java compiler-construction javac

在不久的将来我将不得不使用 JavaCompilers,所以我现在正在尝试学习基础知识并选择最好的一个来学习,我遇到了一个我无法在网上找到答案的问题

目前我正在研究 JavaCompiler。如果我有一个正在评估的程序 X 并且它从 System.in 获取输入并将输出打印到 System.out, 我可以编译并运行它,同时向它提供一些特定的输入并将其输出捕获到文件中吗?

如果是这样,是否有任何在线示例,以便我可以尝试更好地理解它?

编辑:

编译时传入的简单测试用例

import java.util.Iterator;

public class TestSet
{
public static void main(String[] args)
{
  try
  {
     System.out.print(   "[1]--constructor 1, size, isEmpty: ");
     LinkedSet<String> s1 = new LinkedSet<String>();
     if (s1.size() != 0)
        System.out.print("*** size? ***");
     if (!s1.isEmpty())
        System.out.print("*** isEmpty? ***");
     System.out.println();
  }
  catch(Exception e)
  {
     System.out.println("*** CRASH !!! ***");
  }
  try
  {
     System.out.print(   "[2]--constructor 2, size, isEmpty: ");
     LinkedSet<String> s1 = new LinkedSet<String>( "alpha");
     if (s1.size() != 1)
        System.out.print("*** size? ***");
     if (s1.isEmpty())
        System.out.print("*** isEmpty? ***");
     System.out.println();
  }
  catch(Exception e)
  {
     System.out.println("*** CRASH !!! ***");
  }
  try
  {
     System.out.print(   "[3]--contains: ");
     LinkedSet<String> s1 = new LinkedSet<String>("alpha");
     if (!s1.contains("alpha"))
        System.out.print("*** elt. not found ***");
     if (s1.contains("beta"))
        System.out.print("*** non-elt ``found'' ***");
     System.out.println();
  }
  catch(Exception e)
  {
     System.out.println("*** CRASH !!! ***");
  }
  try
  {
     System.out.print(   "[4]--add: ");
     LinkedSet<String> s1 = new LinkedSet<String>();
     s1.add("alpha");
     s1.add("beta");
     s1.add("gamma");
     if (s1.size() != 3)
        System.out.print("*** size? ***");
     if (!s1.contains("alpha") ||
        !s1.contains("beta") ||
        !s1.contains("gamma"))
        System.out.print("*** elt. not found ***");
     if (s1.contains("delta"))
        System.out.print("*** non-elt ``found'' ***");
     s1.add("beta");
     if (s1.size() != 3)
        System.out.print("*** size/duplicates? ***");
     System.out.println();
  }
  catch(Exception e)
  {
     System.out.println("*** CRASH !!! ***");
  }
  try
  {
     System.out.print(   "[5]--remove: ");
     LinkedSet<String> s1 = new LinkedSet<String>();
     s1.add("alpha");
     s1.add("beta");
     s1.add("gamma");
     s1.remove("beta");
     s1.remove("alpha");
     s1.remove("gamma");
     if (s1.size() != 0)
        System.out.print("*** size? ***");
     if (s1.contains("alpha") ||
        s1.contains("beta") ||
        s1.contains("gamma"))
        System.out.print("*** non elt. ``found'' ***");
     System.out.println();
  }
  catch(Exception e)
  {
     System.out.println("*** CRASH !!! ***");
  }
  try
  {
     System.out.print(   "[6]--print: ");
     LinkedSet<String> s1 = new LinkedSet<String>();
     s1.add("this");
     s1.add("is");
     s1.add("assignment");
     s1.add("four");
     s1.print();
  }
  catch(Exception e)
  {
     System.out.println("*** CRASH !!! ***");
  }
  try
  {
     System.out.print(   "[7]--addAll: ");
     LinkedSet<String> s1 = new LinkedSet<String>();
     s1.add("alpha");
     s1.add("beta");
     s1.add("gamma");
     LinkedSet<String> s2 = new LinkedSet<String>();
     s2.add("beta");
     s2.add("delta");
     s1.addAll(s2);
     if (!s1.contains("alpha") || ! s1.contains("beta") ||
        !s1.contains("gamma") || !s1.contains("delta"))
        System.out.print("*** elt. ``dropped'' ***");
     if (s1.size() != 4)
        System.out.print("*** size ? ***");
     System.out.println();
  }
  catch(Exception e)
  {
     System.out.println("*** CRASH !!! ***");
  }

  try
  {
     System.out.print(   "[8]--containsAll: ");
     LinkedSet<String> s1 = new LinkedSet<String>();
     s1.add("alpha");
     s1.add("beta");
     s1.add("gamma");
     LinkedSet<String> s2 = new LinkedSet<String>();
     s2.add("beta");
     s2.add("delta");
     if (s1.containsAll(s2))
        System.out.print("*** non-containment incorrect ***");
     LinkedSet<String> s3 = new LinkedSet<String>();
     s3.add("beta");
     s3.add("alpha");
     if (!s1.containsAll(s3))
        System.out.print("*** containment incorrect ***");
     System.out.println();
  }
  catch(Exception e)
  {
     System.out.println("*** CRASH !!! ***");
  }
  try
  {
     System.out.print(   "[9]--removeAll: ");
     LinkedSet<String> s1 = new LinkedSet<String>();
     s1.add("alpha");
     s1.add("beta");
     s1.add("gamma");
     s1.add("delta");
     LinkedSet<String> s2 = new LinkedSet<String>();
     s2.add("beta");
     s2.add("delta");
     s1.removeAll(s2);
     if (s1.contains("beta") || s1.contains("delta"))
        System.out.print("*** some  elts not removed? ***");
     if (!s1.contains("alpha") || !s1.contains("gamma"))
        System.out.print("*** wrong elts removed? ***");
     System.out.println();
  }
  catch(Exception e)
  {
     System.out.println("*** CRASH !!! ***");
  }
  try
  {
     System.out.print(   "[10]--retainAll: ");
     LinkedSet<String> s1 = new LinkedSet<String>();
     s1.add("alpha");
     s1.add("beta");
     s1.add("gamma");
     s1.add("delta");
     LinkedSet<String> s2 = new LinkedSet<String>();
     s2.add("beta");
     s2.add("delta");
     s1.retainAll(s2);
     if (s1.contains("alpha") || s1.contains("gamma"))
        System.out.print("*** wrong elts retained? ***");
     if (!s1.contains("beta") || !s1.contains("delta"))
        System.out.print("*** wrong elts removed? ***");
     System.out.println();
  }
  catch(Exception e)
  {
     System.out.println("*** CRASH !!! ***");
  }
  try
  {
     System.out.print(   "[11]--elements: ");
     LinkedSet<String> s1 = new LinkedSet<String>();
     s1.add("alpha");
     s1.add("beta");
     s1.add("gamma");
     s1.add("delta");
     Iterator<String> list = s1.elements();
     System.out.print("("+list.hasNext()+") ");
     if (list.hasNext())
        System.out.print(list.next()+"; ");
     System.out.print("("+list.hasNext()+")");
     if (list.hasNext())
        System.out.print(list.next()+"; ");
     System.out.print("("+list.hasNext()+")");
     if (list.hasNext())
        System.out.print(list.next()+"; ");
     System.out.print("("+list.hasNext()+")");
     if (list.hasNext())
        System.out.print(list.next()+"; ");
     System.out.print("("+list.hasNext()+")");
     if (list.hasNext())
        System.out.print(list.next()+"; ");   
     System.out.println();
  }
  catch(Exception e)
  {
     System.out.println("*** CRASH !!! ***");
  }
}
}

最佳答案

你可以......

1.您是否在谈论命令行参数,如果是,则有可能..

例如:

javac Test.java
enter code herejava Test Hello       // Hello is the Input

在 Java 中,这个“Hello”输入被发送到 String[] 数组中的 main() 方法

public static void main(String[] args)

因此,要访问已作为参数传递给 main() 方法参数的 Hello,您需要执行以下操作..

 String s = args[0];

2.现在,如果您想从程序内部将其写入文件,请执行此操作。

 String s = args[0];
 File f = new File(d:\\vivek.txt);
 FileWriter fw = new FileWriter(f);
 BufferedWriter bw = new BufferedWriter(fw);

 bw.write(s);

关于Java编译器: Is it possible to feed in variables on run,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11565783/

相关文章:

Java流操作融合和有状态中间操作

c# - CompilerParameters.ReferencedAssemblies -- 添加对 System.Web.UI.WebControls 的引用

ios - iOS下使用Stitcher时OpenCV编译报错

使用外部 jar 进行 Java 编译 : cannot find symbol

Ant:带有 proc 的 javac:仅来自 Ant?

java - public <T extends Animal> void addAll(List<T> animals) 和 public void addAll(List<Animal> animals) 有什么区别?

java - 处理:当从 Eclipse 设置内部调用时,createShape 返回 null

java - 为什么这个线程允​​许另一个线程访问它的同步方法?

compiler-construction - 反斜杠 "\"到底是什么意思?

java - scalac如何标记编译文件?