Τα πάντα για την java

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την java

Δημοσίευσηαπό clepto » 13 Απρ 2012, 01:09

πίνακα από strings σε ένα αρχείο για να τα αποθηκεύω και να μπορώ να τα ξαναπάρω αργότερα...
ναι το δεύτερο λέω...ποιος λες με συμφέρει περισσότερο;
απλά είδα διαφορετικούς τρόπους για να γράφω σε ένα αρχείο και θέλω να δω ποιος είναι το καλύτερος για αυτό που ζητάω...
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την java

Δημοσίευσηαπό pc_magas » 13 Απρ 2012, 11:15

@clepto
Μπορείς τα string(ακια :p) να τα αποθηκεύεις γραμμή-γραμμή (1 γραμμή 1 θέση στον πίνακα) σε ένα αρχείο κειμένου.
My blog|Κυπριακή Κοινότητα Ελευθέρου Λογισμικού Λογισμικού ανοικτού Κώδικα
Γνώσεις Linux:Ποτέ αρκετές|Προγραμματισμός: Php, javascript, nodejs, python, bash |Aγγλικά:Καλά
Οι υπολογιστές μου:
Spoiler: show
Ubuntu 16.04 64 bit σεIntel(R) Pentium(R) CPU G4400 @ 3.30GHz, 16Gib Ram, 500Gib Hard Disk, και κάρτα γραφικών Nvidia Geforce GT610
Lubuntu 14.04 σε Dell Inspiron mini 10(1010) intel Atom Z500 1Gb ram και gma500 (εδώθη σε άλλον)
Kubuntu 16.04 Lenovo G70 Intel i5 Nvidia Grapgics Card, Intel Graphics card (έχει 2) με Nouveau, 16Gb RAM, 126GB SSD Σκληρό Δίσκο
Άβαταρ μέλους
pc_magas
powerTUX
powerTUX
 
Δημοσιεύσεις: 2598
Εγγραφή: 12 Απρ 2009, 18:55
Τοποθεσία: Αχαρναί Αττικής
Launchpad: pc_magas
IRC: pc_magas
Εκτύπωση

Re: Τα πάντα για την java

Δημοσίευσηαπό clepto » 13 Απρ 2012, 12:08

με το serialization μπορω να περασω ολο τον πινακα και να τον παρω οπως ειναι;
εχει ενα κεφαλαιο στο βιβλιο θα το διαβασω τωρα...
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την java

Δημοσίευσηαπό clepto » 13 Απρ 2012, 22:40

να ρωτήσω και κάτι άλλο, δημιουργώ μια μεταβλητή τύπου αρχείο έτσι
Κώδικας: Επιλογή όλων
File file = new File( τοποθεσια αρχειου );

θέλω να χρησιμοποιήσω arraylist και να γίνει κάπως έτσι
Μορφοποιημένος Κώδικας: Επιλογή όλων
ArrayList<String> array = new ArrayList<String>();
for ( int i = 0; i < array.size(); i++ ) {
File file = new File( array[i]) ;
}

αλλά μου λέει θέλει Array και όχι ArrayList

οπότε τι κάνω;

edit: αυτό λύθηκε!

λοιπόν
έχω αυτό τώρα

Μορφοποιημένος Κώδικας: Επιλογή όλων
public Tag gettags( String songs ) {
try {
File song = new File( songs);
AudioFile file;
file = AudioFileIO.read(song);
Tag tags = file.getTag();
AudioHeader = file.getAudioHeader();
return tags;
} catch (CannotReadException ex) {
Logger.getLogger(Tags.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Tags.class.getName()).log(Level.SEVERE, null, ex);
} catch (TagException ex) {
Logger.getLogger(Tags.class.getName()).log(Level.SEVERE, null, ex);
} catch (ReadOnlyFileException ex) {
Logger.getLogger(Tags.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvalidAudioFrameException ex) {
Logger.getLogger(Tags.class.getName()).log(Level.SEVERE, null, ex);
}
return tags;
}


όπως βλέπετε έχω δύο return tags;
αν σχολιάσω το δεύτερο θα μου πει ότι δεν υπάρχει return statement, αν σχολιάσω το πρώτο θα μου πει ότι δεν υπάρχει η μεταβλητή tags

γιατί μέσα στην try δεν πιάνει το return;
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την java

Δημοσίευσηαπό cyberpython » 15 Απρ 2012, 18:51

clepto έγραψε:
Μορφοποιημένος Κώδικας: Επιλογή όλων
public Tag gettags( String songs ) {
try {
File song = new File( songs);
AudioFile file;
file = AudioFileIO.read(song);
Tag tags = file.getTag();
AudioHeader = file.getAudioHeader();
return tags;
} catch (CannotReadException ex) {
Logger.getLogger(Tags.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Tags.class.getName()).log(Level.SEVERE, null, ex);
} catch (TagException ex) {
Logger.getLogger(Tags.class.getName()).log(Level.SEVERE, null, ex);
} catch (ReadOnlyFileException ex) {
Logger.getLogger(Tags.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvalidAudioFrameException ex) {
Logger.getLogger(Tags.class.getName()).log(Level.SEVERE, null, ex);
}
return tags;
}


όπως βλέπετε έχω δύο return tags;
αν σχολιάσω το δεύτερο θα μου πει ότι δεν υπάρχει return statement, αν σχολιάσω το πρώτο θα μου πει ότι δεν υπάρχει η μεταβλητή tags

γιατί μέσα στην try δεν πιάνει το return;


Η εντολή return μέσα στο try block θα εκτελεστεί μόνο αν δε συμβεί σφάλμα που πετάει exception στις προηγούμενες εντολές του try bock. Αν συμβεί τέτοιο σφάλμα, τότε ο έλεγχος μεταφέρεται στο αντίστοιχο catch block και εκτελείται ο κώδικας εκεί. Τέλος, Η εκτέλεση συνεχίζεται στην αμέσως επόμενη εντολή εκτός του try .. catch. Το πρόβλημά σου είναι οτι η αμέσως επόμενη εντολή εκτός του try .. catch είναι η
Κώδικας: Επιλογή όλων
return tags;
η οποία δε γνωρίζει τίποτα για τη μεταβλητή tags, αφού είναι δηλωμένη σε πιο εσωτερικό block από την εντολή (η μεταβλητή tags "υπάρχει" μόνο εντός του try block και μόνο για τις εντολές μετά τη δήλωσή της - αυτό ισχύει για όλα τα blocks κώδικα π.χ. while, for, if κλπ. στη Java). Μπορείς (αν θέλεις και έχει νόημα στην εφαρμογή σου) να επιστρέφεις null σε περίπτωση σφάλματος (δηλαδή στη δεύτερη εντολή return) ή να ρίχνει η μέθοδός σου κάποιο exception που θα το χειρίζεται με τη σειρά του ο κώδικας που την καλεί.
Κοινότητα ΕΛ/ΛΑΚ Οικονομικού Πανεπιστημίου Αθηνών / Ubuntu-gr / My Web Log
Επίπεδο Γνώσεων Linux: Μέτριο, Προγραμματισμός: Ναι, Aγγλικά: Καλά
Λειτουργικό : Ubuntu 10.04 - 32bits
Η/Υ : Intel Core2 4400@2 GHz / 2GB DDR2 RAM / GeForce 8400 GS 512MB / Creative SB Audigy SE
Άβαταρ μέλους
cyberpython
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 733
Εγγραφή: 14 Μάιος 2008, 13:22
Εκτύπωση

Re: Τα πάντα για την java

Δημοσίευσηαπό clepto » 15 Απρ 2012, 22:07

υπάρχει κάποιος τρόπος να "βγάλω" μια μεταβλητή έξω από έναν while; για να μπορώ να την χρησιμοποιήσω μετά;

Edit:
στην συγκεκριμένη περίπτωση που το ήθελα εγώ βρήκα ένα τρόπο χρησιμοποιήσω ArrayList, αν θέλει κάποιος μπορώ να βάλω τον κώδικα για να δει.
αν μπορεί κάποιος να απαντήσει γενικά στην ερώτηση..
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την java

Δημοσίευσηαπό cyberpython » 15 Απρ 2012, 22:47

clepto έγραψε:υπάρχει κάποιος τρόπος να "βγάλω" μια μεταβλητή έξω από έναν while; για να μπορώ να την χρησιμοποιήσω μετά;

Edit:
στην συγκεκριμένη περίπτωση που το ήθελα εγώ βρήκα ένα τρόπο χρησιμοποιήσω ArrayList, αν θέλει κάποιος μπορώ να βάλω τον κώδικα για να δει.
αν μπορεί κάποιος να απαντήσει γενικά στην ερώτηση..


Μπορείς πολύ απλά να τη δηλώσεις έξω (πριν) από τη δομή while (το ίδιο ισχύει και για όλα τα blocks).

Edit: Μόλις παρατήρησα οτι παραπάνω αναφέρεις οτι σου ζητά array - αυτό γίνεται διότι χρησιμοποιείς τον τελεστή αναφοράς σε στοιχείο array ([]).
Για να πάρεις το i-οστό στοιχείο μίας List χρησιμοποιείς τη μέθοδο get(int index) π.χ.
Κώδικας: Επιλογή όλων
list.get(i)


Στην παραπάνω περίπτωση μπορείς να χρησιμοποιήσεις την απλοποιημένη μορφή της for για collections:
Κώδικας: Επιλογή όλων
for (String fname : array){
  File file = new File(fname) ;
}
Κοινότητα ΕΛ/ΛΑΚ Οικονομικού Πανεπιστημίου Αθηνών / Ubuntu-gr / My Web Log
Επίπεδο Γνώσεων Linux: Μέτριο, Προγραμματισμός: Ναι, Aγγλικά: Καλά
Λειτουργικό : Ubuntu 10.04 - 32bits
Η/Υ : Intel Core2 4400@2 GHz / 2GB DDR2 RAM / GeForce 8400 GS 512MB / Creative SB Audigy SE
Άβαταρ μέλους
cyberpython
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 733
Εγγραφή: 14 Μάιος 2008, 13:22
Εκτύπωση

Re: Τα πάντα για την java

Δημοσίευσηαπό giannosfor » 16 Απρ 2012, 15:34

clepto έγραψε:πίνακα από strings σε ένα αρχείο για να τα αποθηκεύω και να μπορώ να τα ξαναπάρω αργότερα...
ναι το δεύτερο λέω...ποιος λες με συμφέρει περισσότερο;
απλά είδα διαφορετικούς τρόπους για να γράφω σε ένα αρχείο και θέλω να δω ποιος είναι το καλύτερος για αυτό που ζητάω...

Αυτός είναι ένας εύκολος τρόπος.

Μορφοποιημένος Κώδικας: Επιλογή όλων
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class MainClass {
public static void main(String args[]) throws IOException {
FileWriter fout = new FileWriter("test.txt");
fout.write("Giannis,Panteli,Dionisi,Anesth");
fout.close();
FileReader fin = new FileReader("test.txt");
Scanner src = new Scanner(fin);
src.useDelimiter(",");

while (src.hasNext()) {
System.out.println(src.next());
}
fin.close();
}
}


Κώδικας: Επιλογή όλων
Giannis
Panteli
Dionisi
Anesth


clepto έγραψε:με το serialization μπορω να περασω ολο τον πινακα και να τον παρω οπως ειναι;
εχει ενα κεφαλαιο στο βιβλιο θα το διαβασω τωρα...


Μπορείς να περάσεις ένα αντικείμενο στο οποίο να υπάρχει ένα array.
Για αυτό που ζητάς νομίζω το παράδειγμα μου είναι προτιμότερο, συνήθως σε ένα αντικείμενο
υπάρχουν διάφοροι τύποι δεδομένων.
1 Γνώσεις Linux: Καθόλου ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-58-generic 32bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.2.0-57-generic, Microsoft Windows XP Professional
3 Intel Core2 Duo CPU E4600 2.40GHz ‖ RAM 2012 MiB ‖ ASUS INC. P5Q - � P5Q
4 nVidia G94 [GeForce 9600 GT] [10de:0622] {nvidia}
5 eth0: Qualcomm Atheros AR8121/AR8113/AR8114 Gigabit or Fast Ethernet [1969:1026] (rev b0) ⋮ wlan0: 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter
Άβαταρ μέλους
giannosfor
punkTUX
punkTUX
 
Δημοσιεύσεις: 297
Εγγραφή: 24 Απρ 2011, 20:24
Τοποθεσία: Ηράκλειο
Εκτύπωση

Re: Τα πάντα για την java

Δημοσίευσηαπό clepto » 16 Απρ 2012, 15:40

εγώ το έκανα έτσι
Μορφοποιημένος Κώδικας: Επιλογή όλων
package musiclibrary;

import java.io.File;
import java.io.FileNotFoundException;
import java.lang.SecurityException;
import java.util.*;

public class Save_Load_Library {

private Formatter output;
private Scanner input;

public void WriteFile( String file, String[] array ) {
try
{
output = new Formatter(file);
}
catch ( SecurityException securityException )
{
System.err.println( "You dont have the permission to open the file." );
}
catch ( FileNotFoundException filenotFoundException )
{
System.err.println( "File not found." );
}
for ( int i = 0; i < array.length; i++ ) {
output.format("%s \n", array[i]);
}
output.close();
}

public ArrayList<String> readFile( String path ) {
ArrayList< String > rarray = new ArrayList();
try
{
input = new Scanner( new File( path ) );
}
catch ( FileNotFoundException fileNotFoundException )
{
System.err.println( "Error opening file." );
}

try
{
while ( input.hasNext() ) {
rarray.add( input.nextLine() );
}
}
catch ( NoSuchElementException elementException )
{
System.err.println( "File improperly formed." );
input.close();
}
catch ( IllegalStateException stateException )
{
System.err.println( "Error reading from file." );
}
catch ( NullPointerException nullPointerException )
{
System.err.println( "Failed." );
}
return rarray;
}

public void closeFile() {
if ( output != null )
output.close();
}

}
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την java

Δημοσίευσηαπό giannosfor » 16 Απρ 2012, 16:19

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

Μορφοποιημένος Κώδικας: Επιλογή όλων
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Formatter;
import java.util.Scanner;

public class Save_Load_Library {

public static void WriteFile(String file, String[] array) {
try {
Formatter output = new Formatter(file);
for (int i = 0; i < array.length; i++) {
output.format("%s \n", array[i]);
}
output.close();
} catch (SecurityException se) {
System.err.println("You dont have the permission to open the file.");
} catch (FileNotFoundException fe) {
System.err.println("File not found.");
}
}

public static String[] readFile(String path) throws FileNotFoundException {
ArrayList< String> rarray = new ArrayList();
Scanner input = new Scanner(new File(path));
while (input.hasNext()) {
rarray.add(input.nextLine());
}
input.close();
return (String[]) rarray.toArray();
}
}

Πρώτα θα τις έκανα static ,δε χρειάζεται να δημιουργήσεις καινούργιο αντικείμενο αφού περνάς εσύ τα στοιχεία στις παραμέτρους.
Η τελευταία μέθοδο θεωρώ ότι δε χρειάζεται και τον έλεγχο για FileException θα τον έκανα στην κλάση που θα καλούσε τη μέθοδο.
1 Γνώσεις Linux: Καθόλου ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-58-generic 32bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.2.0-57-generic, Microsoft Windows XP Professional
3 Intel Core2 Duo CPU E4600 2.40GHz ‖ RAM 2012 MiB ‖ ASUS INC. P5Q - � P5Q
4 nVidia G94 [GeForce 9600 GT] [10de:0622] {nvidia}
5 eth0: Qualcomm Atheros AR8121/AR8113/AR8114 Gigabit or Fast Ethernet [1969:1026] (rev b0) ⋮ wlan0: 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter
Άβαταρ μέλους
giannosfor
punkTUX
punkTUX
 
Δημοσιεύσεις: 297
Εγγραφή: 24 Απρ 2011, 20:24
Τοποθεσία: Ηράκλειο
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι