2016-12-03 56 views
0

您好想知道是否有辦法通過Java從文本文件執行一行代碼。通過Java在txt文件中執行表達式

例如,假設我有一個文本文件,該文本文件裏面包含一個表達式

int a = 1; 
int b = 2; 
int c; 
c = a + b; 

所以在我的主類,我有一個文件對象,它一個try/catch

File file = new File("test.txt"); 

try { 

    //code here 

}catch (FileNotFoundException e) { 
    System.err.format("File does not exist \n"); 
} 

我的目標是從運行中的test.txt和輸出的答案代碼。我應該如何處理這個問題?

+0

有你想擁有的文件中實際的代碼什麼特別的原因,而不是僅僅具有值並在你的代碼中處理它們? – chatton

+2

這不是一件正常或普通的事情。如果你對編程或java還不熟悉,那麼有100%的可能性,這是你做錯事情的錯誤方式。話雖如此,如果你想在程序中嵌入一個Java兼容的腳本引擎,那就是beanshell。 –

+0

@chatton這是額外的功勞。我知道如何輸出文本文件中的內容,如果我只想要一個字符串。但是,因爲我必須輸出表達式的結果,這是一個int或double是讓我失望。 – Jake

回答

0

首先從@D.B.評論:

你可以嘗試使用JavaCompiler工具,但是,它需要JDK所以如果你在把它額外的信貸確保您的教師將使用運行它JDK不是JRE

當你運行你的程序時,編譯while就可能。它會是這樣的:

  1. 閱讀文件。
  2. 撰寫有效的Java應用程序。
  3. 編譯它。
  4. 並啓動它在新線程上運行。

現在,基本上,你不能在一個文件上編寫Java Standard Edition表達式並加載在運行時執行。這是因爲所有的Java語句都必須解析並轉換爲Java字節碼,並且只能在程序開始運行之前完成。除了構造另一個Java應用程序的情況外,編譯它並將其作爲新的應用程序調用運行,由您或某些Java系統調用完成。

Java虛擬機唯一可以運行的是Java字節碼。所以,你的文本文件沒有被翻譯成它,然後他們不能運行。儘管Python和Javascript等語言並非如此,因爲他們不需要將Java虛擬機的字節碼翻譯爲機器語言,將x86或x64處理器體系結構的彙編代碼翻譯爲C++語言。

您的解決方案是將解釋型語言用作Python和Javascript,而不是Java或C++的編譯語言。正如@that other guy指出的那樣,如果您有興趣瞭解它,則可以使用腳本語言BeanShell,它是一種類似於Java的腳本語言。

參考文獻:

  1. https://en.wikipedia.org/wiki/Interpreted_language
  2. https://en.wikipedia.org/wiki/Compiled_language
  3. https://en.wikipedia.org/wiki/Scripting_language

我的目標是從運行中的test.txt和輸出的答案代碼。我應該如何處理這個問題?

在Java中,爲了實現此目標,您可以使用自己的語法規則解析文件。以及由@Vince Emigh

陳述你需要某種形式的解析和語義分析來做到這一點。你問我們如何編寫一個解釋,並看到你怎麼還沒有發佈你的企圖或指定執行這個時候你有一個具體的問題,這是faaar過於寬泛

對於你的榜樣,它會如:

的text.txt

1 
2 
+ 

Java源代碼文件:

File file = new File("test.txt"); 

try 
{ 
    BufferedReader br  = new BufferedReader(new FileReader(file)) 
    int   numbers[] = new int[10]; 

    String line; 

    while((line = br.readLine()) != null) 
    { 
     if(line.contains("+")) 
     { 
      ... do stuff 
     } 
    } 
} 
catch(FileNotFoundException e) 
{ 
    System.err.format("File does not exist \n"); 
} 
finally 
{ 
    if(reader !=null) 
    { 
     reader.close(); 
    } 
} 

參考文獻:

  1. How to read a large text file line by line using Java?
  2. https://docs.oracle.com/javase/7/docs/api/java/io/FileReader.html
  3. https://docs.oracle.com/javase/7/docs/api/java/io/File.html
  4. Is there an eval() function in Java?