java-Can';是否无法从命令提示符打开.asm文件?

java-Can';是否无法从命令提示符打开.asm文件?,java,jar,command-prompt,executable-jar,Java,Jar,Command Prompt,Executable Jar,所以我有一个.jar文件,我正试图通过Windows7命令提示符运行它。我可以使用java-jarmyjar.jar命令运行它,然后它开始运行。然后,我要求用户输入文件名(出于测试目的,这是testFile1.asm),它显示以下消息: (文件名、目录名或卷标语法不正确)asm 在java.io.FileInputStream.open(本机方法) 位于java.io.FileInputStream.(init)(未知源) 位于java.io.FileInputStream.(init)(未知源

所以我有一个.jar文件,我正试图通过Windows7命令提示符运行它。我可以使用java-jarmyjar.jar命令运行它,然后它开始运行。然后,我要求用户输入文件名(出于测试目的,这是testFile1.asm),它显示以下消息:

(文件名、目录名或卷标语法不正确)asm
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream.(init)(未知源)
位于java.io.FileInputStream.(init)(未知源)
位于java.io.FileReader.(init)(未知源)
在Assembler.firstPass(Assembler.jgava:33)
在Assembler.main(Assembler.java:29)

它在我的Linux终端上运行良好,但我需要让它在Windows cmd上运行,这样我的教授才能看到它的工作原理。如果相关的话,这里是我的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();
  }
}
这是一条线:

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

公共摘要int read()

返回: 数据的下一个字节,如果到达流的末尾,则为-1

打印
url
的值以确保


read()
方法甚至返回您输入的新行字符。这在Windows和Linux中的处理方式不同。使用并尝试
readLine()
方法或类似方法。

在Windows上是CR LF(ascii 13然后是ascii 10)。在linux和cygwin中,这只是LF。所以你也需要检查x==13

这是一种从stdin获取字符串的冗长方法。您是否验证了您正在传递您认为是的文件名?文件是否位于同一目录中?您是否考虑到Windows和Linux对EOL使用不同的字符?(CR诉CRLF)我建议从问题中去掉装配标签。虽然您似乎在编写汇编程序,但问题本身与汇编语言编程无关。
对于
循环,当您确切知道块必须执行多少次时,就使用循环,如果在没有结束条件的情况下使用循环,并在循环中使用
中断
,那将是毫无意义的。使用
而不是