[Java] debug impossibile, non ripete ciclo while

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
sepp95
Prode Principiante
Messaggi: 161
Iscrizione: lunedì 9 agosto 2010, 15:11

[Java] debug impossibile, non ripete ciclo while

Messaggio da sepp95 »

Codice: Seleziona tutto

import java.io.*;

public class SelezionaFile1{
		
		
	public static void main(String[] args) throws IOException {
        	//creo gli stream
		PipedOutputStream pos = new PipedOutputStream();
		DataOutputStream dos = new DataOutputStream(pos);
		PipedInputStream pis = new PipedInputStream(pos);
		DataInputStream dis = new DataInputStream(pis);
        	//creo il file
		File Cartella = new File("test");
		while (Cartella.isDirectory()){	
					

            		//inizio a dialogare con l'utente						
            		System.out.println("ELENCO FILE NELLA CARTELLA\n\n\n");
            		String[] children = Cartella.list();
            
            		if (children == null) {
                		//Faccio qualcosa
					System.out.println("ciao");
            		} else {
                		for (int i=0; i<children.length; i++) {
                    			//Ottengo i nomi dei file o delle cartelle
                   			 String filename = children[i];
                    			System.out.println(filename);
                		}
            		}
            
           	 	System.out.println("\n\n\n");
           	 	System.out.println("Seleziona cosa aprire:  ");	
            		byte vai[] = new byte[10];
            		String value = new String("");
           		while (value != "") {
                		try {	
                   		 	System.in.read(vai); //riempio l'array di caratteri
                    		 	value = new String(vai);
                    			dos.writeUTF(value);//lo trasformo in stringa
                		}catch(IOException e) { 
                    			e.printStackTrace();
               	 		}

                		String str;
                		str = dis.readUTF(); //copio la stringa
                		System.out.println(Cartella.getAbsolutePath());
			 	String percorso = "/home/giuseppe/Scrivania/test";
				Cartella = new File(Cartella, str);
				System.out.println(Cartella.getAbsolutePath());
				


				if (Cartella.exists()){
					value = "";
				}
            		} 
					
					
	}
   }
}
vi ho postato il codice.
il programma, per ora, dovrebbe consistere nel mosrare il contenuto di una cartella, "test", creata apposta per l'esperimento, e permettere di swicchare tra le varie cartelle, mostrandone di volta in volta il contenuto.

ho provato un sacco di volte ma non funge.
ecco il mio output, per esempio:

Codice: Seleziona tutto

ELENCO FILE NELLA CARTELLA



nuovo file
ciao
poro
hello




Seleziona cosa aprire:  
hello
/home/giuseppe/Scrivania/test
/home/giuseppe/Scrivania/test/hello
e poi aspetta che io faccia qualcosa, ma cosa?  ::) ::)

aspetto un'illuminazione, non è molto complesso.

PS, ho fatto stampare il percorso assoluto per vedere se è corretto, e lo è!!!
perchè non funge?
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da Zoff »

Le stringhe non si confrontano con == e !=.

Ma a cosa ti servono gli stream usati così?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
sepp95
Prode Principiante
Messaggi: 161
Iscrizione: lunedì 9 agosto 2010, 15:11

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da sepp95 »

E come posso comfrontarle?

Gli stream per fare esperienza che li ho appena imparati. Comunque come mi consiglieresti di usarli?

E come confronto le stringhe?
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da Zoff »

sepp95 ha scritto: E come posso comfrontarle?

[...]

E come confronto le stringhe?
http://download.oracle.com/javase/7/doc ... .Object%29
sepp95 ha scritto: Gli stream per fare esperienza che li ho appena imparati. Comunque come mi consiglieresti di usarli?
In questo esercizio ti servono solo per leggere l'input dell'utente. Nient'altro.
Quindi solo un InputStream.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
sepp95
Prode Principiante
Messaggi: 161
Iscrizione: lunedì 9 agosto 2010, 15:11

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da sepp95 »

Grazie. Quindidevo solo fare

Stringa.equals(altra-stringa)?

Grazie zoff
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da Zoff »

Per la questione stringhe sì.

Per il funzionamento del programma no.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
sepp95
Prode Principiante
Messaggi: 161
Iscrizione: lunedì 9 agosto 2010, 15:11

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da sepp95 »

modificato così

Codice: Seleziona tutto

import java.io.*;

public class SelezionaFile1{
		
		
	public static void main(String[] args) throws IOException {
        	//creo gli stream
		PipedOutputStream pos = new PipedOutputStream();
		DataOutputStream dos = new DataOutputStream(pos);
		PipedInputStream pis = new PipedInputStream(pos);
		DataInputStream dis = new DataInputStream(pis);
        	//creo il file
		File Cartella = new File("test");
		while (Cartella.isDirectory()){	
					

            		//inizio a dialogare con l'utente						
            		System.out.println("ELENCO FILE NELLA CARTELLA\n\n\n");
            		String[] children = Cartella.list();
            
            		if (children == null) {
                		//Faccio qualcosa
					System.out.println("ciao");
            		} else {
                		for (int i=0; i<children.length; i++) {
                    			//Ottengo i nomi dei file o delle cartelle
                   			 String filename = children[i];
                    			System.out.println(filename);
                		}
            		}
            
           	 	System.out.println("\n\n\n");
           	 	System.out.println("Seleziona cosa aprire:  ");	
            		byte vai[] = new byte[10];
            		String value = new String("");
           		while (value.equals("")) {
                		try {	
                   		 	System.in.read(vai); //riempio l'array di caratteri
                    		 	value = new String(vai);
                    			dos.writeUTF(value);//lo trasformo in stringa
                		}catch(IOException e) { 
                    			e.printStackTrace();
               	 		}

                		String str;
                		str = dis.readUTF(); //copio la stringa
                		System.out.println(Cartella.getAbsolutePath());
			 	String percorso = "/home/giuseppe/Scrivania/test";
				Cartella = new File(Cartella, str);
				System.out.println(Cartella.getAbsolutePath());
				


				if (Cartella.exists()){
					value = "";
				}
            		} 
					
					
	}
   }
}
comunque non funziona.
provo ad entrare in una sottocartella e il programma termina. sai trovarne il motivo?
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da Zoff »

Così funziona:

Codice: Seleziona tutto

import java.io.*;

public class SelezionaFile1{


    public static void main(String[] args) throws IOException {
    	boolean stop = false;
    	File cartella = null;
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Inserisci il percorso della cartella che vuoi visualizzare: ");
        String nomecartella = in.readLine();
        if(nomecartella==null || !(cartella = new File(nomecartella)).exists()){
        	System.err.println("Hai inserito una cartella non valida!");
        	System.err.println("Il programma verrà terminato.");
        	System.exit(1);
        }
        while(!stop){    
            //inizio a dialogare con l'utente                        
            System.out.println("ELENCO FILE NELLA CARTELLA\n\n\n");
            File[] children = cartella.listFiles();

            if (children == null) {
                System.err.println("Impossibile visualizzare la cartella '"+cartella+"'.");
            	System.err.println("Il programma verrà terminato.");
            	System.exit(1);
            } 
            
            for (File file : children) {
            	System.out.print(file.isDirectory() ? "Dir\t" : "File\t");
                //Ottengo i nomi dei file o delle cartelle
                System.out.println(file.getAbsolutePath());
            }

            System.out.println();
            System.out.println();
            System.out.println("Seleziona cosa aprire:");
            String str = in.readLine();
            
            if(str==null){
            }
            
            System.out.println("Cartella in cui ti trovi: "+cartella.getAbsolutePath());
            cartella = new File(cartella, str);
            System.out.println("File/cartella che hai deciso di visualizzare: "+cartella.getAbsolutePath());

            if (!cartella.exists()){
                stop = true;
            }
        }
        System.out.println("Il programma è terminato! Ciao.");
    }
}
Come vedi non servono tutti quegli stream.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
sepp95
Prode Principiante
Messaggi: 161
Iscrizione: lunedì 9 agosto 2010, 15:11

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da sepp95 »

grazie lo controllerò appena possibile.
(b2b) (b2b) (b2b)
sepp95
Prode Principiante
Messaggi: 161
Iscrizione: lunedì 9 agosto 2010, 15:11

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da sepp95 »

bellissimo il programma. è come in realtà avrei voluto venisse.
stavo solo facendo la parte più semplice, poi avrei implementato anche il il fatto se è una cartella o no.


però un paio di domande, non ho capito qualche riga

Codice: Seleziona tutto

 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
non ho mai incontrato un BufferedReader...

poi

Codice: Seleziona tutto

 if(nomecartella==null || !(cartella = new File(nomecartella)).exists()){
significa "se il nome non è stato scritto o se non esiste"?

Codice: Seleziona tutto

for (File file : children)
totale non comprensione dei ":"

Codice: Seleziona tutto

System.out.print(file.isDirectory() ? "Dir\t" : "File\t");
che significano i : e il ?

forse hai notato che non sono molto pratico con i cosi logici, credo siano quelli, ma usati così non capisco.

lo so sono 4/5 domende, ma velocissime
Avatar utente
ryuujin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1032
Iscrizione: venerdì 14 aprile 2006, 2:57
Sesso: Maschile
Località: Pescara
Contatti:

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da ryuujin »

sepp95 ha scritto: che significano i : e il ?
operatore ternario

Codice: Seleziona tutto

(condizione) ? (se_è_vera) : (se_è_falsa)

equivalente a:

if(condizione){
    se_è_vera
}else{
    se_è_falsa
}
Esempio:

Codice: Seleziona tutto

int age = ...;
System.out.println(age > 18 ? "sei maggiorenne" : "datello in faccia");
r.
Ultima modifica di ryuujin il lunedì 25 luglio 2011, 18:04, modificato 1 volta in totale.
http://blog.spicydev.it
"Chi riceve un'idea da me, ricava conoscenza senza diminuire la mia; come chi accende la sua candela con la mia, riceve luce senza lasciarmi
al buio". - Thomas Jefferson
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da Zoff »

sepp95 ha scritto:

Codice: Seleziona tutto

 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
non ho mai incontrato un BufferedReader...
È una delle classi piu' semplici per la gestione delal lettura e scrittura di stringhe su uno stream.

Dagli un occhiata: http://download.oracle.com/javase/7/doc ... eader.html
sepp95 ha scritto: poi

Codice: Seleziona tutto

 if(nomecartella==null || !(cartella = new File(nomecartella)).exists()){
significa "se il nome non è stato scritto o se non esiste"?
In realtà ho sbagliato, doveva essere &&, Cioè: "Se nomecartella non è NULL e la cartella corrispondente a quel nome NON esiste"
sepp95 ha scritto:

Codice: Seleziona tutto

for (File file : children)
totale non comprensione dei ":"
È la sintassi foreach per il linguaggio java:
http://download.oracle.com/javase/1,5.0 ... reach.html
sepp95 ha scritto:

Codice: Seleziona tutto

System.out.print(file.isDirectory() ? "Dir\t" : "File\t");
che significano i : e il ?
Vedi quanto detto da ryuujin
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
sepp95
Prode Principiante
Messaggi: 161
Iscrizione: lunedì 9 agosto 2010, 15:11

Re: [Java] debug impossibile, non ripete ciclo while

Messaggio da sepp95 »

Ottimo
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti