2017-10-04 3 views
0

Je me fais une erreur qui dit:Problème avec le flux de sortie de fichier

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) 

la fonction makeUser comprend les éléments suivants:

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; 
    } 

} 

la méthode de cryptage encrypte seulement les chaînes en utilisant un césure césar

Je sais que le chiffrement Caesar n'est pas le meilleur type de chiffrement m ethod, bien que, actuellement, j'essaie juste d'en faire une preuve fictive. la méthode de cryptage est la suivante:

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); 
     } 
    } 
} 

la classe où helloworld Je reçois l'erreur a le code suivant:

  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); 

Inscrivez- est juste un JPanel avec JTextFields dedans. Ma question est pourquoi je reçois cette erreur, je voudrais une généralisation de ce que je dois faire pour que je puisse comprendre moi-même, mais si ce n'est pas possible alors la solution est bien. Merci pour votre temps.

+0

Avez-vous essayé d'appeler 'File.createNewFile()' sur votre fichier avant de le passer à 'FileWriter'? pourrait vouloir vérifier avec 'File.exists()' d'abord aussi. –

+1

changer votre méthode de cryptage pour inclure uniquement les caractères autorisés pour le nom de fichier –

+0

@AhmadAlsanie merci l'homme, ce type d'erreur est le type qui me dérange beaucoup haha. – dirtydan

Répondre

1

Le système d'exploitation sur lequel vous exécutez n'autorise pas un nom tel que drscqei<@.txt. Windows par exemple doesn't allow <

+0

merci l'homme haha ​​l'a réalisé peu de temps après et en quelque sorte me battre pour une telle erreur stupide. – dirtydan