Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπερα παιδια, εχω το εξης προβλημα:

 

Εχω φτιαξει μια κλαση Read η οποια διαβαζει απο ενα αρχειο και επιστρεφει το περιεχομενο σε ενα πινακα.

Πιο συγκεκριμενα κανω το εξης και ολα δουλευουν μια χαρα:

 Read file = new Read("file.txt");     //  το file.txt βρισκεται μεσα στον φακελο του project
 String[] text = file.OpenFile();        // η OpenFile ειναι μια μεθοδος της Read η οποια διαβαζει το αρχειο και το τοποθετει στον πινακα

Ως εδω ολα μια χαρα...

 

 

Εκει που εχω το προβλημα ειναι οταν θελω να διαβαζω ολα τα αρχεια ενος φακελου.. Αυτο που κανω ειναι το εξης:

		File directory = new File( "C:/Users/testDir");
		 
		File files[] = directory.listFiles();
		for (File f : files) {
		                System.out.println( f.getName());    // τυπωνει μια χαρα τα ονοματα των txt files
				
                       
                                ReadFile file = new ReadFile(f.getName());
                                String[] text = file.OpenFile();    //   <--- εδω υπαρχει το προβλημα: 
                                      // (Δεν είναι δυνατή η εύρεση του καθορισμένου αρχείου από το σύστημα)
		}


Γιατι δεν μπορει να ανοιξει τα αρχεια; Υπαρχει περιπτωση το προβλημα να ειναι στην class Read;

 

Η δομη της Read ειναι ετσι:

   class Read{
	private String path;
	
	public ReadFile( String filePath ){
		 path = filePath;
	}

     // ... Υλοποιηση μεθοδων

 } 
Δημοσ.

Ας ξεκινήσουμε ότι είναι αυστηρότατο Java convention να γράφονται οι μέθοδοι με το πρώτο γράμμα πεζο ενώ οι κλάσεις με κεφαλαίο. Οπότε το OpenFile κάντο openFile. 

 

 Λές ότι: η OpenFile ειναι μια μεθοδος της Read η οποια διαβαζει το αρχειο και το τοποθετει στον πινακα

 

Αλλά κάνεις: 

String[] text = file.OpenFile();  

To οποίο δεν κάνει αυτό που θέλεις.

Εδώ 1) επιστρέφεις ένα μονό String σε ένα Array of Strings. το οποίο  Array of Strings αρχικοποιείς και σε κάθε Iteration. Το σωστό θα ήταν να έκανες:

String[] text = new String[files.length]; //αρχικοποίηση του text array στο μέγεθος του file array;
int i = 0;
for (File f : files) {
         System.out.println( f.getName()); // τυπωνει μια χαρα τα ονοματα των txt files
                

         ReadFile file = new ReadFile(f.getName());
         text[i++] = file.openFile(); //και αναθέτεις στο ith element του text την επιστροφή της μεθόδου
}
Δημοσ.

Δεν μου το περνει..

Σε αυτο εδω  text[i++] = file.openFile(); πεταει Type mismatch from String[] to String

 

Μηπως δεν κανω κατι καλα; Να ανεβασω τον κωδικα της openFile();

Δημοσ.

Δεν μου το περνει..

Σε αυτο εδω  text[i++] = file.openFile(); πεταει Type mismatch from String[] to String

 

Μηπως δεν κανω κατι καλα; Να ανεβασω τον κωδικα της openFile();

 

Ναι ανέβασέ τον γιατί τώρα απλά κάνω υποθέσεις σε σχέση με αυτό που νομίζω ότι κάνει η openFile();  ;)

 

Με μια πρώτη ματιά υποθέτω ότι λανθασμένα επιστρέφεις String[] απο την openFile αντί για String.

Δημοσ.
	public String[] openFile() throws IOException{
		
		FileReader fr = new FileReader ( path );
		BufferedReader textReader = new BufferedReader( fr );
		
		int numberOfLines = readLines() ;  
		String textData[] = new String [ numberOfLines ];
	
        int i;
        for( i=0 ; i<numberOfLines ; i++ ){
        	textData[i] = textReader.readLine();
        }
        textReader.close();
		return textData;
	}

Επειδη υπαρχει αρκετος κωδικας που δουλευει με την openFile() δεν θελω να αλλαξει αν γινεται, δλδ θελω να επιστρεφει το κειμενο σε ενα πινακα απο Strings

Δημοσ.

Ο τρόπος που διαβάζεις το αρχείο με τον textreader ενδέχεται να σου πετάξει exception. είσαι σίγουρος ότι βγαίνει απο το loop? Κάνε ένα debug εκεί να δεις τι γίνεται.

 

EDIT: χμμ και τώρα που το βλέπω, έχεις ανοίξει FileReader, μπαίνεις στο readLines() και...ανοίγεις και 2ο FileReader εκεί; Αν το κάνεις 99% είναι εκεί το πρόβλημα.

 

 

Επίσης αφού θέλεις το αρχείο σου να το αποθηκεύεις ανα γραμμή σε array τότε θέλεις array of arrays. Η μάλλον ένα ArrayList<String[]> για να ξεμπερδεύεις.

ArrayList<String[]> text = new ArrayList<>(); 
int i = 0;
for (File f : files) {
         System.out.println( f.getName()); 
                

         ReadFile file = new ReadFile(f.getName());
         text.get(i++).add(file.openFile()); 
}
Δημοσ.

Επιστρεφει το πληθος των γραμμων του κειμενου...Eιναι περιττο :P

 

Οκ το κατάλαβα αυτό :P δες το EDIT πιό πάνω, αν ανοίγεις και εκεί FileReader λογικά θα έχεις πρόβλημα. οπότε βάλε το statement αυτό στην αρχή του openFile.

Δημοσ. (επεξεργασμένο)

Ουτε αυτο μου το περνει!

 

Μετα το text.get(i++) δεν μου αφηνει να προσθεσω το .add(file.openFile());

 

 

Χμμ μηπως η ReadFile() περνει το ονομα του αρχειου που βρισκεται μεσα στο προτζεκτ και επειδη εγω του δινω το path δεν παιζει;


κατα 99% τωρα που το ξανα βλεπω ειναι αυτο..

Δλδ η ReadFile "κοιταει" μεσα στο φακελο του προτζεκτ και για αυτο μου εμφανιζει οτι το αρχειο δεν βρεθηκε.. :(

Επεξ/σία από nik324
Δημοσ.

Ξαναρωτησα και πιο πανω αλλα δεν απαντησες: εκει που καλεις τον constructor της ReadFile, περνας ορισμα f.getName(). Αυτο τι επιστρεφει; Το absolute path του f μαζι με το ονομα του; Η σκετο το ονομα του;

Δημοσ.

Για τσεκαρε μηπως η κλαση File εχει καποια αλλη μεθοδο που να επιστρεφει και το πληρες path του αρχειου, για να χρησιμοποιησεις αυτην στη θεση της (η σε συνδυασμο με την) getName...

Δημοσ. (επεξεργασμένο)

Ναι, υπαρχει συναρτηση που επιστρεφει το πληρες path του αρχειου.. Οποτε ολα λυνονται αν στην Read δωσω ορισμα το πληρες path.. Πολυ απλο τελικα. :\

Επεξ/σία από nik324

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...