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

java - file management


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

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

Έχω μια άσκηση η οποία θέλει οι μέθοδοι μου να δέχονται ως ορίσματα ένα αρχέιο και την ίδια στιγμή η μια να το φτιάχνει και η άλλη να το διαβάζει δημιουργώντας μου πρόβλημα στον τρόπο που πρέπει να βάλω τα paths στον κώδικα. Θα σας παρακαλούσα να μου δείξετε τον τρόπο. Το όνομα του αρχείου μπορει να είναι οποιοδήποτε π.χ temp.txt kai to path π.χ C:\Data\temp.txt. Η εκφώνηση:

Να γραφεί μια κλάση με όνομα Stearyl και δημόσιο προσδιοριστή.
Η κλάση Stearyl πρέπει να περιέχει δύο δημόσιες, στατικές μεθόδους
mAmatorial και mSamanid.
Η πρώτη μέθοδος mAmatorial θα πρέπει να δέχεται ως όρισμα μια
συμβολοσειρά (String). Η συμβολοσειρά αυτή θα περιέχει το όνομα
του αρχείου που πρέπει να δημιουργηθεί.
Προσοχή: Για το νέο αρχείο θα πρέπει να ορίσετε και το μονοπάτι
στο οποίο θα βρίσκεται (δηλ. στο φάκελο με τις απαντήσεις σας).
Το αρχείο  αυτό θα πρέπει να έχει τα εξής χαρακτηριστικά:

- Μέγεθος: 1077 bytes
- Λίστα επιτρεπόμενων bytes:
byte[] aRetooth = {97, 98, 99, 100, 101, 102, 103, 104, 105}.
Η λίστα των επιτρεπόμενων bytes θα πρέπει να οριστεί ως στατικό
δημόσιο χαρακτηριστικό της κλάσης Stearyl με όνομα aRetooth.
Τα δεδομένα του αρχείου πρέπει να είναι τυχαία και να ακολουθούν
ομοιόμορφη κατανομή. (Όλα τα bytes να έχουν περίπου τον ίδιο αριθμό
εμφάνισης).
Η μέθοδος mAmatorial θα πρέπει να επιστρέφει μια μεταβλητή τύπου
long που θα περιέχει το άθροισμα των τιμών των 500 πρώτων bytes.

Η δεύτερη μέθοδος mSamanid θα πρέπει να δέχεται ως όρισμα μία
συμβολοσειρά (String) η οποία θα περιέχει το όνομα ενός αρχείου.
Το αρχείο θα διαβάζεται στην μνήμη (ορίστε και το μονοπάτι όπως
παραπάνω) και θα καταγράφονται για αυτό οι παρακάτω μετρικές:

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

Τα δεδομένα θα πρέπει να επιστρέφονται ως πίνακας από ακεραίους
(int) από την mSamanid. Ο πίνακας αυτός στην θέση 1 (π.χ. a[0])
θα έχει το μεγεθος του αρχείου και στις υπόλοιπες των αριθμό εμφανίσεων
για κάθε byte (π.χ. στην θέση 2 τον αριθμό εμφανίσεων του πρώτου
byte κ.ο.κ.).

 

Κώδικας:

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

public class Stearyl{
    public static int fileSize=1077;
    public static byte[] aRetooth = {97, 98, 99, 100, 101, 102, 103, 104, 105};
    
public static long mAmatorial(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 sumFirst500=0;
        try {
        BufferedWriter out = new BufferedWriter(new FileWriter(filename));
           for (int i=0;i<fileSize;i++){
               byte a=aRetooth[random.nextInt(aRetooth.length)];
               if (i<500) sumFirst500+=a;
           out.write(a);
        }
        
        out.close();
    } catch (IOException e) {
    }


    return sumFirst500;
    
}
public static int[]mSamanid(String filename){
    int[]pinakas=new int[aRetooth.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];
        int offset = 0;
        int numRead = 0;
        while (offset < bytes.length
               && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
            offset += numRead;
        }
        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<aRetooth.length;j++){
            pinakas[j+1]=0;
        }
    for (int i=0;i<bytes.length;i++){
        for (int j=0;j<aRetooth.length;j++){
            if (bytes[i]==aRetooth[j]) 
                pinakas[j+1]++;
        }
    }
    
    return pinakas;
    }
}
Επεξ/σία από zatara90
Δημοσ.

 

Έχω μια άσκηση η οποία θέλει οι μέθοδοι μου να δέχονται ως ορίσματα ένα αρχέιο και την ίδια στιγμή η μια να το φτιάχνει και η άλλη να το διαβάζει δημιουργώντας μου πρόβλημα στον τρόπο που πρέπει να βάλω τα paths στον κώδικα. Θα σας παρακαλούσα να μου δείξετε τον τρόπο. 

Τι προβλημα σου δημιουργειται δεν καταλαβα ακομη. 

 

Δευτερον τι ακριβως παιζει με την νομεκλατουρα;  Stearyl; mAmatorial; mSamanid; aRetooth;

Δημοσ.

Με λίγα λόγια δεν ξέρω πως να δηλώσω το ονομα και το path του αρχειου μέσα στις μεθόδους mAmatorial και mSamanid ώστε οι μέθοδοι να λειτουργούν σύμφωνα με την εκφώνηση. Θα μπορούσα να φτιάξω μια main όπου θα καλούσα τις μεθόδους μέσω αντικειμένων και θα δείλωνα εκεί το όνομα και το path και θα τελείωνε εκεί η υπόθεση αλλά η άσκηση δεν θέλει main. H νομεκλατούρα είναι γιατί η ασκηση είναι απο randomizer που σου δίνει ο καθηγητής.

Δημοσ.

Δε θα το δηλώσεις μέσα στις μεθόδους, αφού ήδη λειτουργούν σύμφωνα με την εκφώνηση. Εννοείται πως αν θέλεις να το δεις να τρέχει θα πρέπει να έχεις και μια main, δεν υπάρχει άλλος λογικός τρόπος.

 

Μη μπερδεύεις το "δε θέλει main στη λύση που υποβάλλεις" με το "δε θα υπάρχει main ποτέ και πουθενά".

Δημοσ.

Φίλε μου, οι ασκήσεις που μας βάζει είναι του "δε θα υπάρχει main ποτέ και πουθενά" δυστυχώς. Όταν το πας να κάνει check task στο φάκελο με τις απαντήσεις, το προγραμμα το κάνει compile μόνο του (με κάποιο τρόπο) και σου λέει αν υπάρχει πρόβλημα. Στην περίπτωση μου αν βάλω main μου λέει ότι δεν λύθηκε η ασκηση σύμφωνα με την εκφώνηση.

public static void main(String args[]){
    Stearyl sl=new Stearyl();
    long a=sl.mAmatorial("C:\Users\***\Desktop\java_programming_2\exercises\temp.txt");
        System.out.println(a);
    int f[]=sl.mSamanid("C:\Users\***\Desktop\java_programming_2\exercises\temp.txt");
    for (int i=0;i<f.length;i++){
        System.out.println(f[i]);
    }

}
Δημοσ.

Όταν το πας να κάνει check task στο φάκελο με τις απαντήσεις, το προγραμμα το κάνει compile μόνο του (με κάποιο τρόπο) και σου λέει αν υπάρχει πρόβλημα.

Μάντεψε ποιος είναι αυτός ο τρόπος. Υπάρχει ένα πρόγραμμα με main που φορτώνει την class σου και κάνει δουλειά.

 

Έτσι κι αλλιώς όμως δεν κατάλαβες τι είπα. Δε θα την υποβάλλεις τη main. Για τις δοκιμές θα την έχεις.

 

ΥΓ το new Stearyl τι ρόλο παίζει; Μήπως δεν έχεις καταλάβει τι σημαίνει static?

  • Like 1

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

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

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

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

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

Σύνδεση

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

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