1
votes

Lire et écrire à partir de fichiers Java

Comment puis-je lire un nombre, une chaîne ou un caractère d'un fichier. Je trouve de nombreuses façons, mais je ne sais pas quelle est la meilleure approche claire. Je veux effectuer des opérations d'entrée / sortie comme la console système.

J'ai créé 2 fichiers input.in et output.out et je veux lire un nombre depuis input.in et imprimer le nombre dans output.out. p>

Exception in thread "main" java.util.NoSuchElementException: No line found
  at java.util.Scanner.nextLine(Unknown Source)
  at MainClass.main(MainClass.java:9)

Je veux d'abord tester si fonctionne pour lire à partir d'un fichier mais j'ai obtenu ceci:

import java.util.Scanner;
import java.io.*;

public class MainClass {

    public static void main(String[] args) throws IOException {
        File file = new File("input.in");
        Scanner scanner = new Scanner(file);
        String a = scanner.nextLine();
        System.out.println(a);
    }
}

Dans l'entrée du fichier .dans j'ai:

file

i/o


4 commentaires

Si vous êtes débutant, je vous conseille d'éviter la classe File et de vous en tenir à la classe Path à la place dans la mesure du possible. Avez-vous vérifié que votre fichier input.in contient bien une ligne?


Il contient 2 lignes: première ligne: fichier, deuxième entrée / sortie. J'ai mis les fichiers dans src> package par défaut


Il ne lit peut-être pas le fichier input.in que vous pensez lire. Vous devriez lui donner un chemin complet ou apprendre à utiliser des ressources. Mais pour un débutant, essayez avec un chemin complet.


Le chemin était faux, merci!


3 Réponses :


1
votes

Comme RealSkeptic mentionné dans les commentaires, je soupçonne que votre application ne parvient pas à trouver le fichier que vous avez fourni. Je vous suggère d'adopter le code suivant:

import java.util.Scanner;
import java.io.*;

public class MainClass {
    public static void main(String[] args) throws Exception {
        String filePath = "c:\\absolute\\path\\to\\input.in";
        File file = new File(filePath);
        if(file.exists()) {
            System.out.println("Reading contents of file at: " + filePath)
            try (Scanner scanner = new Scanner(file)) {
                while(scanner.hasNext()) {
                    String a = scanner.nextLine();
                    System.out.println(a);
                }
            }
        }
        else {
            System.out.println("File not found at: " + filePath);
        }
    }
}

Références:


0 commentaires

0
votes

Le chemin était erroné. Pour ceux qui ont aussi mon problème voici le code des opérations d'entrée / sortie:

import java.util.Scanner;
import java.io.*;

public class MainClass {

    public static void main(String[] args) throws IOException {
        //the root path is your project name
        File in = new File("input.in");
        File out = new File("output.out");

        Scanner scannerInput = new Scanner(in);
        BufferedWriter writer = new BufferedWriter(new FileWriter(out));
        String string;
        while(scannerInput.hasNextLine()) {
            string = scannerInput.nextLine();
            writer.write(string);
            writer.newLine();
        }

        writer.flush();//very important
        scannerInput.close();
        writer.close();

    }
}


1 commentaires

FYI: Cette réponse a été signalée comme étant de mauvaise qualité en raison de sa longueur et de son contenu. Vous voudrez peut-être l'améliorer pour éviter les votes négatifs.



1
votes

Vous pouvez utiliser FileInputStream et FileOutputStream pour ce faire ..

J'espère que cela vous servira

import java.util.Scanner;
import java.io.*;

public class MainClass {

    public static void main(String[] args) throws IOException {
        FileInputStream inputStream = null;
        FileOutputStream outputStream = null;
        Scanner sc = null;
        try {
            inputStream = new FileInputStream("IN File");
            outputStream = new FileOutputStream("OUT File");
            sc = new Scanner(inputStream, "UTF-8");
            while (sc.hasNextLine()) {
                String line = sc.nextLine();
                System.out.println(line);
                byte[] strToBytes = line.getBytes();
                outputStream.write(strToBytes);
                outputStream.write(System.getProperty("line.separator").getBytes());
            }
            // note that Scanner suppresses exceptions
            if (sc.ioException() != null) {
                throw sc.ioException();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (sc != null) {
                sc.close();
            }
        }
    }
}


0 commentaires