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

Προβλημα με αρχεια σε java


annakihlia

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

Δημοσ.

Παιδια καλήσπερα.Ειμαι καινουργια στον προγραμματισμο και θα ηθελα τη βοηθεια σας.Σε μια κλαση θελω να δημιουργησω ενα αρχειο που να εχει ορισμενα χαρακτηριστικα(μεσω μιας μεθοδου), και μετα να αναγνωσω αυτα τα δεδομενα σε πινακες απο αλλη μεθοσο της ιδιας κλασης.Συγκεκριμενα η εκφωνηση ειναι ως εξης:

Να γραφεί μια κλάση με όνομα (Havaiki) και δημόσιο προσδιοριστή.Η

κλάση Havaiki πρέπει να περιέχει δύο στατικές μεθόδους m_avowal

και m_spathilla .Η πρώτη μέθοδος m_avowal θα πρέπει να δέχεται

ως όρισμα μια συμβολοσειρά (String). Η συμβολοσειρά αυτή θα περιέχει

το όνομα του αρχείου που πρέπει να δημιουργηθεί. Το αρχείο αυτό

θα πρέπει να έχει τα εξής χαρακτηριστικά:

 

- Μέγεθος: 1900 bytes

- Λίστα επιτρεπόμενων bytes:

byte[] a_femineity = {97, 98, 99, 100, 101, 102, 103, 104, 105,

49, 45, 50, 51, 52}.

Η λίστα των επιτρεπόμενων bytes θα πρέπει να οριστεί ως στατικό

δημόσιο χαρακτηριστικό της κλάσης Havaiki με όνομα a_femineity.

Τα δεδομένα του αρχείου πρέπει να είναι τυχαία και να ακολουθούν

ομοιόμορφη κατανομή. (Όλα τα bytes να έχουν περίπου τον ίδιο αριθμό

εμφάνισης).

Η μέθοδος m_avowal θα πρέπει να επιστρέφει μια μεταβλητή τύπου

long που θα περιέχει το άθροισμα των τιμών των 572 πρώτων bytes.

Η μέθοδος m_spathilla θα πρέπει να δέχεται ώς όρισμα μία συμβολοσειρά

(String) η οποία θα περιέχει το όνομα ενός αρχείου.Το αρχείο θα

διαβάζεται στην μνήμη και θα καταγράφονται για αυτό οι παρακάτω

μετρικές:

 

- Μέγεθος

- Αριθμός εμφανίσεων για κάθε byte που περιλαμβάνεται

στον πίνακα που ορίστηκε στον πίνακα a_femineity.

 

Τα δεδομένα θα πρέπει να επιστρέφονται ως πίνακας από ακεραίους

(int) από την m_spathilla. Ο πίνακας αυτός στην θέση 1 (π.χ. a[0])

θα έχει το μεγεθος του αρχείου και στις υπόλοιπες των αριθμό εμφανίσεων

για κάθε byte (π.χ. στην θέση 2 τον αριθμό εμφανήσεων του πρώτου

byte κ.ο.κ)

 

Εχω κανει το πρωτο σκελος αλλα δε μπορω με τιποτα να κανω το δευτερο.Εχω μπερδευτει.Η οποια βοηθεια ειναι ευπροσδεκτη.Ευχαριστω.

Δημοσ.

αν μπορεις εξηγησε μου πως θα κανω τη δευτερη μεθοδο,η πρωτη ειναι ετοιμη.Η εργασια πρεπει να παραδωθει σημερα,και δεν εχω χρονο να σου γραψω τωρα το πρωτο,επειδη ειμαι σε αλλο υπολογιστη.Περιμενω απαντηση σου...Ευχαριστω εκ των προτερων...

Δημοσ.

Θα έχεις ένα νέο πίνακα (ας τον πούμε array) ο οποίος θα έχει μέγεθος a_femineity.length + 1 θέσεις (η μία εξτρά θέση είναι για το μέγεθος του αρχείου). Αυτός ο πίνακας στην ουσία διαθέτει μετρητές για κάθε μία από τις μετρικές που θες (bytes αρχείου και μία θέση ανά επιτρεπτό byte όπως αυτά ορίζονται στη λίστα).

 

Αφού θα διαβάζεις byte-byte το αρχείο θα αυξάνεις ανάλογα και τον αντίστοιχο μετρητή. Π.χ. διάβασες ένα byte --> αυξάνεις κατά 1 το περιεχόμενο του array[0]. Επιπλέον έστω ότι το συγκεκριμένο byte είναι το 98 --> αυξάνεις κατά 1 το περιεχόμενο του array[2]. Δηλαδή σε κάθε ανάγνωση byte αυξάνεις πάντα 2 μετρητές-θέσεις του πίνακα array.

 

Η μέθοδος m_spathilla() το μόνο που κάνει είναι να "γεμίσει" αυτόν τον array (διαβάζοντας το αρχείο) και να τον επιστρέψει (τουλάχιστον έτσι το καταλαβαίνω).

Δημοσ.

Νομίζω το εξήγησα αρκετά αναλυτικά. :rolleyes: Από εκεί και πέρα χρειάζεται και λίγο δικιά σου "τριβή" με το πρόβλημα.

Πού ακριβώς κολλάς; Αν είναι για το κομμάτι για το διάβασμα κατά byte είναι κάτι αντίστοιχο με αυτό που έχεις κάνει στην πρώτη μέθοδο (αντί για γράψιμο τώρα κάνεις διάβασμα). Δε θυμάμαι ακριβώς να σου πω πώς γίνεται, θα πρέπει να κάτσω να το διαβάσω κι εγώ.

 

Βρήκα κάτι μετά από ψάξιμο στο google. Για κοίτα εδώ μήπως σε βοηθήσει.

Δημοσ.

βιαστικά επειδή είμαι στην δουλειά πρέπει να είναι αυτό

 

>
import java.util.Random;
import java.io.*;

public class Havaiki{
public static int fileSize=1900;
public static byte[] a_femineity = {97, 98, 99, 100, 101, 102, 103, 104, 105,49, 45, 50, 51, 52};
public Havaiki(){

}	
static long m_avowal(String filename){
Random random=new Random();
try {

File file1=new File(filename);
boolean success = file1.createNewFile();

       if (!success){
       	file1.delete();
       	file1.createNewFile();
       }  

   } catch (IOException e) {
   }

long sumFirst572=0;
    try {
       BufferedWriter out = new BufferedWriter(new FileWriter(filename));
      	for (int i=0;i<fileSize;i++){
      		byte a=a_femineity[random.nextInt(a_femineity.length)];
      		if (i<572) sumFirst572+=a;
	   out.write(a);
    } 
       
       out.close();
   } catch (IOException e) {
   }


return sumFirst572;

}
static int[]m_spathilla(String filename){
int[]pinakas=new int[a_femineity.length+1];
int length=0;
byte[] bytes=null;
try {
File file1=new File(filename);
InputStream is = new FileInputStream(file1);
       length = (int) file1.length();
       bytes = new byte[(int)length];
       // Read in the bytes
       int offset = 0;
       int numRead = 0;
       while (offset < bytes.length
              && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
           offset += numRead;
       }
       // Ensure all the bytes have been read in
       if (offset < bytes.length) {
           throw new IOException("Could not completely read file "+file1.getName());
       }
      is.close();
      	} catch (IOException e) {
   }

pinakas[0]=length;

for (int j=0;j<a_femineity.length;j++){
		pinakas[j+1]=0;
	}
for (int i=0;i<bytes.length;i++){
	for (int j=0;j<a_femineity.length;j++){
		if (bytes[i]==a_femineity[j]) pinakas[j+1]++;
	}
}

return pinakas;
}
public static void main(String args[]){
Havaiki jj=new Havaiki();
long a=jj.m_avowal("ofi.txt");
	System.out.println(a);
int f[]=jj.m_spathilla("ofi.txt");
for (int i=0;i<f.length;i++){
	System.out.println(f[i]);
}

}



}

Δημοσ.

Και μονο που ασχοληθηκες,σε ευχαριστω τοοοσο πολυυυ!!!!Στο compile μου βγαινει σωστο,αλλα μου λεει πως δεν εχουν οριστει κατάλληλα οι ζητουμενες μεθοδοι.Ξερεις γιατι?

Δημοσ.
Και μονο που ασχοληθηκες,σε ευχαριστω τοοοσο πολυυυ!!!!Στο compile μου βγαινει σωστο,αλλα μου λεει πως δεν εχουν οριστει κατάλληλα οι ζητουμενες μεθοδοι.Ξερεις γιατι?

 

ποιος το λέει?

Δημοσ.

Τις εργασιες τις παραδιδουμε ηλεκτρονικα και με καποιον τροπο μας απανταει το dos αν εχουμε καποια λαθη.Τεσπα,εχω βρει το προβλημα,μπορεις μηπως να αφαιρεσεις τη main και να βαλεις τα περιεχομενα της στην αλλη κλαση?Πρεπει να το κανουμε χωρις τη main.

Δημοσ.

κάτι τέτοιο εννοείς?

 

>
import java.util.Random;
import java.io.*;

public class Havaiki{
public static int fileSize=1900;
public static byte[] a_femineity = {97, 98, 99, 100, 101, 102, 103, 104, 105,49, 45, 50, 51, 52};

static long m_avowal(String filename){
Random random=new Random();
try {

File file1=new File(filename);
boolean success = file1.createNewFile();

       if (!success){
       	file1.delete();
       	file1.createNewFile();
       }  

   } catch (IOException e) {
   }

long sumFirst572=0;
    try {
       BufferedWriter out = new BufferedWriter(new FileWriter(filename));
      	for (int i=0;i<fileSize;i++){
      		byte a=a_femineity[random.nextInt(a_femineity.length)];
      		if (i<572) sumFirst572+=a;
	   out.write(a);
    } 
       
       out.close();
   } catch (IOException e) {
   }


return sumFirst572;

}
static int[]m_spathilla(String filename){
int[]pinakas=new int[a_femineity.length+1];
int length=0;
byte[] bytes=null;
try {
File file1=new File(filename);
InputStream is = new FileInputStream(file1);
       length = (int) file1.length();
       bytes = new byte[(int)length];
       // Read in the bytes
       int offset = 0;
       int numRead = 0;
       while (offset < bytes.length
              && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
           offset += numRead;
       }
       // Ensure all the bytes have been read in
       if (offset < bytes.length) {
           throw new IOException("Could not completely read file "+file1.getName());
       }
      is.close();
      	} catch (IOException e) {
   }

pinakas[0]=length;

for (int j=0;j<a_femineity.length;j++){
		pinakas[j+1]=0;
	}
for (int i=0;i<bytes.length;i++){
	for (int j=0;j<a_femineity.length;j++){
		if (bytes[i]==a_femineity[j]) pinakas[j+1]++;
	}
}

return pinakas;
}


}


 

>
public class TryHavaiki{
public static void main(String args[]){
Havaiki jj=new Havaiki();
long a=jj.m_avowal("ofi.txt");
	System.out.println("sum of the first 152 bytes="+a);
int f[]=jj.m_spathilla("ofi.txt");
System.out.println("filesize="+f[0]);
System.out.println("bytes and occurrences");
for (int i=1;i<f.length;i++){
	System.out.println("byte="+jj.a_femineity[i-1]+" was found "+f[i]+" times");
}
}
}

Δημοσ.

η TryHavaiki είναι άλλη κλάση σε άλλο αρχείο

και δείχνει πως χειρίζεσαι την ζητούμενη κλάση.

 

αν δεν στο ζητάει μην την στείλεις απλά.

Δημοσ.

Ναι αλλα και παλι δυστυχως,μου γραφει το ιδιο πραγμα,πως δεν εχουν οριστει καταλληλα οι ζητουμενες μεθοδοι...Δε ξερω γιατι...Το προγραμμα σου ειναι μια χαρα...Δε φταιει αυτο.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...