2016-05-29 53 views
-2

我正在使用這個在我的世界MOD裏面讀取和寫入文件,並且所有的前導空間都被轉換爲?在文件中。Java正在改變我的領先空間到問號

文件輸入樣本:

{ 
   "ReturnToStart": "1b", 

文件出來放樣品:

{ 
???"ReturnToStart": "1b", 
//xxxxxxxxxxxxxxxxxxxxxxx 
var ips = new java.io.FileInputStream("ABC.json"); 
var fileReader = new java.io.InputStreamReader(ips,"UTF-8"); 
var data1 = fileReader.read(); 
var data; 
var start1 = ""; 
while(data1 != -1) {  
data = String.fromCharCode(data1); 
start1 = start1+data; 
data1 = fileReader.read(); 
} 
fileReader.close(); 
var fileWriter = new java.io.FileWriter("J_out2.txt"); 
fileWriter.write(start1); 
fileWriter.close(); 
+2

您將Java和JavaScript結合在一起。他們是2完全不同的語言。將會出現錯誤,然後你把它們放在一起 –

+0

沒有錯誤 - 它可以在每行的開始處讀寫很好,只是這些奇怪的字符 - 我認爲它與回車有關。 – TAP

回答

0

它看起來像你在Java 8中使用Nashorn。基本上,這是在Java VM中運行的JavaScript,可以訪問所有Java對象。我不認爲這些是正常的空間,我懷疑這些空間不是空格(代碼爲160)。看看data1在這些位置的價值會很有趣。

JavaScript方法String.fromCharCode不能在Nashorn中正確轉換UTF-8代碼。實際上,這將不會起作用,因爲在UTF-8中,單個字符可以分割爲多個字符,並且從read返回的值限制爲16位。不夠。

以下可能是您需要的。我已經包含但是評論了start1變量,因爲您可能想在代碼中使用它,但不是必需的。

var fileReader = new java.io.InputStreamReader(
    new java.io.FileInputStream("ABC.json"), "UTF-8"); 
var bufferedReader = new java.io.BufferedReader(fileReader); 
var fileWriter = new java.io.OutputStreamWriter(
    new java.io.FileOutputStream("J_out2.txt"),"UTF-8"); 
var line; 
// var start1=new java.lang.StringBuilder(); 
while(line=bufferedReader.readLine()) { 
    // start1.append(line); 
    // start1.append('\n'); 

    fileWriter.write(line); 
    fileWriter.write('\n'); 
} 
fileWriter.close(); 
bufferedReader.close(); 
0

var ips = new java.io.FileReader("ABC.json"); 
 
var data1 = ips.read(); 
 
var data; 
 
var start1 = ""; 
 
while(data1 != -1) {  
 
data = String.fromCharCode(data1); 
 

 
if (data1 ==11 ||data1 ==12 || data1 ==10) { 
 
data1 = ips.read(); 
 
continue; 
 
} 
 
//npc.say(data1+" "+ data); 
 
data = String.fromCharCode(data1); 
 
start1 = start1+data; 
 
data1 = ips.read(); 
 
} 
 
ips.close(); 
 
npc.say(start1);

那麼我拿出了換行符,垂直製表符和換頁符(10,11,12),它起作用了。