0

したがって、Windows7コマンドプロンプトで実行しようとしているこの.jarファイルがあります。コマンドjava-jarmyJar.jarを使用して実行すると、実行が開始されます。次に、ユーザーにファイル名を入力するように依頼します(テスト目的では、これはtestFile1.asmです)。次のメッセージが表示されます。

(ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません)asm
      at java.io.FileInputStream.open(Native Method)
      at java.io.FileInputStream。(init)(Unknown Source)
      at java.io.FileInputStream。(init )(Unknown Source)
      at java.io.FileReader。(init)(Unknown Source)
      at Assembler.firstPass(Assembler.jgava:33)
      at Assembler.main(Assembler.java:29)

Linuxターミナルでは正常に動作しますが、教授が動作することを確認できるように、Windowscmdで動作させる必要があります。関連する場合は、これが私のJavaクラスです。

import java.io.*;
public class Assembler {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException {
    int x;
    System.out.println("Please enter a file name.");
    String file ="";
    for(int i = 0; ;i++){ 
        x = System.in.read();
        if (x == -1 || x == 10){
            break;
        }
        file = file + (char)x;
    }
    firstPass(file);
}

static private void firstPass(String url) throws FileNotFoundException, IOException{
    BufferedReader reader = new BufferedReader(new FileReader(url));
    Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("symbol_table.txt"), "utf-8"));
    int LC = 0;
    String currLine = reader.readLine();
    while(currLine != null){
        if(currLine.charAt(3) != ','){         //No Label present
            if(currLine.contains("ORG")){       //ORG is present
                LC = Integer.parseInt(currLine.substring(9,12));
                LC++;
            }
            else if(currLine.contains("END")){
                //secondPass();
                break;
            }
            else {
                LC++;
            }
        }
        else{                                   //Label is present
            writer.write(currLine.substring(0,3) + " " + LC +"\r\n");
            LC++;
        }            
        currLine = reader.readLine();
    }
    writer.close();
  }
}
4

2 に答える 2

0

WindowsではCRLF(ascii 13、次にascii 10)です。Linuxとcygwinでは、LFです。したがって、x==13もチェックする必要があります。

于 2013-03-13T03:22:41.417 に答える
0

それは行です:

if (x == -1 || x == 10){

InputStreamAPIから

public abstract int read()

戻り値:データの次のバイト、またはストリームの終わりに達した場合は-1。

の値を印刷urlして確認してください。

read()メソッドは、入力した改行文字も返します。これは、WindowsとLinuxでは異なる方法で処理されます。BufferedReaderを使用して、readLine()メソッドなどを試してください。

于 2013-03-13T01:57:59.910 に答える