nik324 Δημοσ. 2 Νοεμβρίου 2013 Δημοσ. 2 Νοεμβρίου 2013 Καλησπερα παιδια, εχω το εξης προβλημα: Εχω φτιαξει μια κλαση 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; } // ... Υλοποιηση μεθοδων }
parsifal Δημοσ. 2 Νοεμβρίου 2013 Δημοσ. 2 Νοεμβρίου 2013 Μήπως η getName δεν επιστρέφει πλήρες path και οι 2 τελευταίες εντολές σου κάνουν μια τρύπα στο νερό;
ZAKKWYLDE Δημοσ. 2 Νοεμβρίου 2013 Δημοσ. 2 Νοεμβρίου 2013 Ας ξεκινήσουμε ότι είναι αυστηρότατο 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 την επιστροφή της μεθόδου }
nik324 Δημοσ. 2 Νοεμβρίου 2013 Μέλος Δημοσ. 2 Νοεμβρίου 2013 Δεν μου το περνει.. Σε αυτο εδω text[i++] = file.openFile(); πεταει Type mismatch from String[] to String Μηπως δεν κανω κατι καλα; Να ανεβασω τον κωδικα της openFile();
ZAKKWYLDE Δημοσ. 2 Νοεμβρίου 2013 Δημοσ. 2 Νοεμβρίου 2013 Δεν μου το περνει.. Σε αυτο εδω text[i++] = file.openFile(); πεταει Type mismatch from String[] to String Μηπως δεν κανω κατι καλα; Να ανεβασω τον κωδικα της openFile(); Ναι ανέβασέ τον γιατί τώρα απλά κάνω υποθέσεις σε σχέση με αυτό που νομίζω ότι κάνει η openFile(); Με μια πρώτη ματιά υποθέτω ότι λανθασμένα επιστρέφεις String[] απο την openFile αντί για String.
nik324 Δημοσ. 2 Νοεμβρίου 2013 Μέλος Δημοσ. 2 Νοεμβρίου 2013 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
ZAKKWYLDE Δημοσ. 2 Νοεμβρίου 2013 Δημοσ. 2 Νοεμβρίου 2013 Ο τρόπος που διαβάζεις το αρχείο με τον 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()); }
nik324 Δημοσ. 2 Νοεμβρίου 2013 Μέλος Δημοσ. 2 Νοεμβρίου 2013 Επιστρεφει το πληθος των γραμμων του κειμενου...Eιναι περιττο
ZAKKWYLDE Δημοσ. 2 Νοεμβρίου 2013 Δημοσ. 2 Νοεμβρίου 2013 Επιστρεφει το πληθος των γραμμων του κειμενου...Eιναι περιττο Οκ το κατάλαβα αυτό δες το EDIT πιό πάνω, αν ανοίγεις και εκεί FileReader λογικά θα έχεις πρόβλημα. οπότε βάλε το statement αυτό στην αρχή του openFile.
nik324 Δημοσ. 2 Νοεμβρίου 2013 Μέλος Δημοσ. 2 Νοεμβρίου 2013 Θα κοιταξω ολα αυτα που μου ειπες.. και αν δεν παιξει ξανα γραφω Σε ευχαριστω πολυ
nik324 Δημοσ. 3 Νοεμβρίου 2013 Μέλος Δημοσ. 3 Νοεμβρίου 2013 (επεξεργασμένο) Ουτε αυτο μου το περνει! Μετα το text.get(i++) δεν μου αφηνει να προσθεσω το .add(file.openFile()); Χμμ μηπως η ReadFile() περνει το ονομα του αρχειου που βρισκεται μεσα στο προτζεκτ και επειδη εγω του δινω το path δεν παιζει; κατα 99% τωρα που το ξανα βλεπω ειναι αυτο.. Δλδ η ReadFile "κοιταει" μεσα στο φακελο του προτζεκτ και για αυτο μου εμφανιζει οτι το αρχειο δεν βρεθηκε.. Επεξ/σία 3 Νοεμβρίου 2013 από nik324
parsifal Δημοσ. 3 Νοεμβρίου 2013 Δημοσ. 3 Νοεμβρίου 2013 Ξαναρωτησα και πιο πανω αλλα δεν απαντησες: εκει που καλεις τον constructor της ReadFile, περνας ορισμα f.getName(). Αυτο τι επιστρεφει; Το absolute path του f μαζι με το ονομα του; Η σκετο το ονομα του;
nik324 Δημοσ. 3 Νοεμβρίου 2013 Μέλος Δημοσ. 3 Νοεμβρίου 2013 Η f.getName() επιστρεφει το ονομα του αρχειου... δλδ txtname.txt
parsifal Δημοσ. 3 Νοεμβρίου 2013 Δημοσ. 3 Νοεμβρίου 2013 Για τσεκαρε μηπως η κλαση File εχει καποια αλλη μεθοδο που να επιστρεφει και το πληρες path του αρχειου, για να χρησιμοποιησεις αυτην στη θεση της (η σε συνδυασμο με την) getName...
nik324 Δημοσ. 3 Νοεμβρίου 2013 Μέλος Δημοσ. 3 Νοεμβρίου 2013 (επεξεργασμένο) Ναι, υπαρχει συναρτηση που επιστρεφει το πληρες path του αρχειου.. Οποτε ολα λυνονται αν στην Read δωσω ορισμα το πληρες path.. Πολυ απλο τελικα. :\ Επεξ/σία 3 Νοεμβρίου 2013 από nik324
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα