有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

文件输出流的java问题

所以我得到一个错误,它说:

java.io.FileNotFoundException: drscqei<@.txt (The filename, directory name, 
or volume label syntax is incorrect)

at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileWriter.<init>(Unknown Source)
at ch1.User.makeUser(User.java:205)
at ch1.helloworld.main(helloworld.java:94)

makeUser功能包括以下内容:

public static User makeUser(String fn, String ln, String un, String pw, String cpw, String dob) {
    if (pw.equals(cpw)) {
        System.out.println("pass is same as confirm.");
        if (containsNumber(pw) && charLength(pw) && charLength(un) && !(containsInvalidSymbol(un))) {
            System.out.println(
                    "pw has an uppercase and lower and doesnt have any symbols and length of un and pw are greater than 5 and less than 50.");
            encrypt(fn, ln, un, pw, dob);
            File f = new File(encryptedUser + ".txt");
            try {
                FileWriter fw = new FileWriter(f);
                fw.write(encryptedFn + "," + encryptedLn + "," + encryptedUser + "," + encryptedPass + ","
                        + encryptedDob);
                fw.flush();
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return new User(fn, encryptedLn, encryptedUser, encryptedPass, encryptedDob);
        } else {
            return null;
        }
    } else {
        return null;
    }

}

加密方法只是使用凯撒密码对字符串进行加密

I know that Caesar cipher isn't the best type of encryption method, although, currently I'm just trying to make it dummy proof. the encryption method is as follows:

public static void encrypt(String fn, String ln, String un, String pw, String dob) {

    int shift = 10;
    for (int x = 0; x < un.length(); x++) {
        char c = (char) (un.charAt(x) + shift);
        if (c > 'z') {
            encryptedUser += (char) ((un.charAt(x) - 26) + shift);
        } else {
            encryptedUser += (char) (un.charAt(x) + shift);
        }
    }
}

我得到错误的helloworld类有以下代码:

            boolean signUpScreen = true;
            do {
                int s = JOptionPane.showOptionDialog(null, signUp, "Sign Up", JOptionPane.OK_CANCEL_OPTION,
                        JOptionPane.PLAIN_MESSAGE, null, Enter_Cancel, Enter_Cancel[0]);
                if (s == JOptionPane.OK_OPTION) {

                    User.eraseEncryptions();

                    User sUser = User.makeUser(signUpfn.getText(), signUpln.getText(), signUpUser.getText(),
                            signUpPass.getText(), signUpCPass.getText(), signUpDob.getText());
                    if (sUser == null) {
                        JOptionPane.showMessageDialog(null,
                                "Sorry, something went wrong. please check that you have filled in all the text fields and that your password is the same as your confirm password.",
                                "Error", JOptionPane.PLAIN_MESSAGE);
                    } else {
                        JOptionPane.showMessageDialog(null,
                                "Success! You have created a new account! welcome " + User.fn, "Account Created",
                                JOptionPane.PLAIN_MESSAGE);
                        signUpScreen = false;
                    }
                } else {
                    signUpScreen = false;
                }
            } while (signUpScreen);

注册只是一个带有JTextFields的JPanel。我的问题是,为什么我会出现这个错误,我想概括一下我必须做什么,这样我就能自己解决它,但如果不可能,那么解决方案是好的。谢谢你抽出时间


共 (1) 个答案

  1. # 1 楼答案

    您正在运行的操作系统不允许使用drscqei<@.txt这样的名称。Windows例如doesn't allow <