Pourquoi mon programme est le refus d'accès à créer un fichier?
Dans le livre que je suis en train de lire sur Java, il démontre la sérialisation à l'aide d'un programme écrit dans un fichier et le stocke à l'écart. J'ai une erreur étrange que je ne sais pas comment le lire et il me refuse l'accès à la création d'un .fichier txt. Voici l'erreur:
Exception in thread "main" java.io.FileNotFoundException: C:\testFile.txt (Access is denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at serializableTests.MyProgram.main(MyProgram.java:18)
Voici les deux classes pour le programme:
Classe d'utilisateur:
public class User implements Serializable {
private static final long serialVersionUID = 4415605180317327265L;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Et voici la classe principale:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
public class MyProgram {
public static void main(String[] args) throws IOException {
User user = new User();
user.setUsername("tpage");
user.setPassword("password123");
File file = new File("C:\\testFile.txt");
OutputStream fileOutputStream = new FileOutputStream(file);
ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream);
outputStream.writeObject(user);
System.out.println("I've store the user object in a file called " + file.getName());
}
}
sortie
2019-04-22 08:40:28,895 [main] INFO g.t.service.impl.CsvServiceImpl - Directory structure created data/test/tnx-log/tnc.log false
2019-04-22 08:40:28,895 [main] INFO g.t.service.impl.CsvServiceImpl - file.getAbsoluteFile() : C:\Users\jigar\apps\workspace\trade-publisher\data\test\tnx-log\tnc.log canWrite() : false
2019-04-22 08:40:28,895 [main] INFO g.t.service.impl.CsvServiceImpl - txn log file created data/test/tnx-log/tnc.log true
2019-04-22 08:40:28,957 [main] INFO g.t.service.impl.CsvServiceImpl - Directory structure created data/test/tnx-log/tnc.log false
2019-04-22 08:40:28,957 [main] INFO g.t.service.impl.CsvServiceImpl - file.getAbsoluteFile() : C:\Users\jigar\apps\workspace\trade-publisher\data\test\tnx-log\tnc.log canWrite() : false
@Override
public void createTxnInfoFile() throws IOException {
File file = new File(txnLogFile);
if (!file.exists()) {
boolean directoryStructureCreated = file.getParentFile().mkdirs();
logger.info("Directory structure created {} {} ", txnLogFile, directoryStructureCreated);
logger.info("file.getAbsoluteFile() : " + file.getAbsoluteFile() + " canWrite() : " + file.canWrite());
boolean fileCreated = file.createNewFile();
logger.info("txn log file created {} {} ", txnLogFile, fileCreated);
}
file = null;
}
Quelle est la version de Windows que vous utilisez? Le contrôle de compte d'utilisateur peut bloquer dans des sortes d'endroits merveilleux et même silencieusement. Nous avons eu des problèmes avec
Je suis sous Windows 7. Est-ce un problème?
Voir la mdma est la réponse (et la fermeture de votre flux ;))
Essayez d'exécuter votre programme java avec les droits admin?
File#canWrite
retour true
mais alors pas du fichier à été écrit. Comme une note de côté, vous ne semblent jamais être la conclusion de votre flux, ce qui peut verrouiller le fichierJe suis sous Windows 7. Est-ce un problème?
Voir la mdma est la réponse (et la fermeture de votre flux ;))
Essayez d'exécuter votre programme java avec les droits admin?
OriginalL'auteur hasherr | 2013-04-10
Vous devez vous connecter pour publier un commentaire.
Sur les versions récentes de Windows, vous ne pouvez pas écrire dans le dossier racine du lecteur système sans privilèges élevés.
Pour le faire fonctionner, modifier l'emplacement à un autre lecteur ou un changement à une sous-dossier dans C, comme votre répertoire de profil, par exemple c:\users\yourname\testfile.txt
(Notez que vous êtes en utilisant un .txt de fin, mais le fichier produit ne sera pas lisible dans un éditeur. La sérialisation est un format binaire.)
EDIT:
Mise en œuvre dans le changement de code de
à quelque chose comme
J'ai utilisé votre nom "fléau" - remplacer par ce que votre nom de connexion se trouve sur votre pc.
Alors j'ai pris vos conseils avec évolution vers un sous-dossier, et, bien que travaillé, quand j'ai essayé de l'ouvrir dans mon OS(en dehors d'eclipse), il a montré que: í sr serializableTests.Utilisateur=Ga"A0_¡ L passwordt Ljava/lang/String;L usernameq ~ xpt password123t tpage
Java par défaut, la sérialisation est un format binaire - pas de point de chargement dans un éditeur de texte. Si vous souhaitez sérialiser vers un format texte, utilisez XStream, qui sérialise à xml.
Hey merci beaucoup, j'ai effectivement utilisé le double correction arrière par accident et qu'il a travaillé et se souvenaient de mon Python de formation et pourquoi vous utilisez 2 \\ au lieu de 1(la plupart du temps). Merci encore, je l'apprécie.
Vous n'avez pas besoin de barres obliques inverses dans les noms de fichiers Java. Utilisation /.
OriginalL'auteur mdma
OriginalL'auteur Harinath Reddy