psychogamer Δημοσ. 6 Μαΐου 2015 Δημοσ. 6 Μαΐου 2015 υπαρχει καποιος τροπος ωστε στην ιδια κλαση με τον ελεγχο (if) να κανει write του αριθμους ειτε στο αρχειο bytes ειτε στο αρχειο interger apo το αρχειο class.dat που εχω δημιουργησει?? ευχαριστω εκφωνηση : Δημιουργήστε ένα πρόγραμμα το οποίο διαβάζει ακεραίους από το αρχείο class.dat και τους διανέμει (γράφει) σε δύο αρχεία. Οι αριθμοί που είναι από μηδέν (0) μέχρι δικόσια-πενήντα-πέντε (255) αποθηκεύονται ως bytes (το λιγότερο σημαντικό τους byte) στο αρχείο C:\bytes.dat. Οι υπόλοιποι αριθμοί αποθηκεύονται ως ακέραιοι αριθμοί στο αρχείο C:\int.dat. //το class.dat ειναι το αρχειο το εχω δημιουργησει package writebytes; import java.io.*; public class WriteBytes { public static void main(String[] args) { int[] data = { 271, 73, 70, 56, 57, 97, 15, 0, 15, 0, 128, 0, 0, 255, 255, 255, 0, 0, 0, 44, 0, 0, 0, 0, 15, 0, 15, 0, 0, 2, 34, 132, 127, 161, 200, 185, 205, 84, 128, 241, 81, 35, 175, 155, 26, 228, 254, 104, 55, 102, 121, 165, 201, 145, 169, 154, 142, 172, 116, 162, 240, 90, 197, 5, 0, 259}; try { FileOutputStream file = new FileOutputStream("c:\\class.dat"); for (int i = 0; i < data.length; i++) file.write(data); file.close(); } catch(IOException e) { System.out.println("Error " + e.toString()); } } }
albNik Δημοσ. 6 Μαΐου 2015 Δημοσ. 6 Μαΐου 2015 FileOutputStream fileBytes=new FileOutputStream("bytes.dat"); FileOutputStream fileInts=new FileOutputStream("ints.dat"); if(n<256) fileBytes.write((byte)n); else fileInts.write(n.toString().getBytes()); Για διαβασμα του class.dat θες την FileInputStream 1
psychogamer Δημοσ. 6 Μαΐου 2015 Μέλος Δημοσ. 6 Μαΐου 2015 μου εβγαλε ενα error package test; import java.io.*; public class Test { public static void main(String[] args) { try { FileInputStream file = new FileInputStream("c:\\class.dat"); boolean eof = false; int count = 0; while (!eof) { int input = file.read(); System.out.print(input + " "); if (input == -1) eof = true; else count++; FileOutputStream fileBytes=new FileOutputStream("bytes.dat"); FileOutputStream fileInts=new FileOutputStream("ints.dat"); if(input<256) fileBytes.write((byte)input); else fileInts.write(input.toString().getBytes()); } file.close(); System.out.println("\nBytes read: " + count); } catch(IOException e) { System.out.println("Error " + e.toString()); } } } // μου εβγαλε cannot invoke tstring
AlexHello Δημοσ. 6 Μαΐου 2015 Δημοσ. 6 Μαΐου 2015 Στη δομη επιλογης: if(input<256) fileBytes.write((byte)input); else fileInts.write(input.toString().getBytes()); Δεν μπορεις να καλεσεις την μεθοδο toString απο ενα πρωτογονο int. Θα χρειαστει να αντικαταστησεις την μετατροπη με μια απο τις δυο επιλογες: Integer.toString(input).getBytes() ή String.valueOf(input).getBytes(). 1
psychogamer Δημοσ. 6 Μαΐου 2015 Μέλος Δημοσ. 6 Μαΐου 2015 σε ευχαριστω ! δουλεψε , το close των αρχειων οπου δημιουργησα να το κανω μεσα στην eof?
AlexHello Δημοσ. 6 Μαΐου 2015 Δημοσ. 6 Μαΐου 2015 Παρατηρω στον υπαρχων κωδικα οτι ανοιγεις τα δυο FileOutputStreams εντος του while-loop οποτε με καθε επαναληψη το περιεχομενο του σωστου αρχειου διαγραφεται και στην θεση του αποθηκευεται το καθε νεο byte που διαβαζεις. Αυτο ειναι το επιθυμητο αποτελεσμα? Αν οχι, ανοιξε τα FileOutputStreams πριν το loop, κανε οτι διαδικασια χρειαζεται και κλειστα μαζι με το file αφου τελειωσει το loop. (EDIT) Αν θελεις οπωσδηποτε να τα ανοιγεις εντος loop και να μην διαγραφονται τα προηγουμενα δεδομενα περασε σαν δευτερη παραμετρο στον constructor των FileOutputStream ενα true για appending αντι για overwriting
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα