Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16-ak0001nl combina RTX 5080 Laptop e Ryzen AI 9 HX 375 in un desktop replacement potente e ben raffreddato, con display 240 Hz e dotazione completa. Autonomia limitata e calibrazione non perfetta frenano l'entusiasmo, ma a 2.609 euro è tra le proposte più interessanti della categoria.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-01-2006, 10:28   #1
Geolux
Junior Member
 
Iscritto dal: Sep 2005
Messaggi: 11
[Java-Linux]Lettura,Scrittura,e Cancellazione file

Salve avrei un quesito da farvi sto tentando di creare una classe in grado di leggere e copiare e eliminare file. Questa classe deve poter compiere queste tre operazioni sia su Linux che su Window. Ho creato questa classe, che su Windows funziona correttamente ma su Linux nn sembra fuzionare da quello che ho dedotto io credo che java nn riesca a creare dal percorso del file in linux un file. Mi rivolgo alla vostra sapiensa miei cari amici per una soluzione perche nn riesco a venirne a capo ringrazio tutti per le risposte ciao gente


ecco qui la mia classe

import java.io.*;
import java.lang.*;

public class Filecopy{

public static void copiaFile(String sorgente, String destinazione)throws IOException
{

final String eol = System.getProperty("line.separator");

FileReader bf_in = new FileReader(sorgente);
FileWriter bf_out =new FileWriter(destinazione);
BufferedReader let =new BufferedReader(bf_in);
BufferedWriter scr=new BufferedWriter(bf_out);

String riga=null;
while((riga=let.readLine())!=null){

scr.write(riga + eol);


}


let.close();
scr.close();
}
public static void deleteFile(String sorgente)throws IOException{

File orig =new File (sorgente);
orig.delete();

}



public static void main (String[] args)throws IOException {

String p ="/home/David/originale.txt";
String d ="/home/David/copia.txt";
copiaFile(p,d);


}
}

cambiando il percorso x windows la classe fuziona correttamente
ESEMPIO:
String p="C:\Documents and Settings\Utente\Desktop\lettura.txt";
String d="C:\Documents and Settings\Utente\Desktop\david.txt";
la classe fà esattamente quello che deve fare sapete dirmi il pefrche e come modificare i metodi


Vi ringrazio per le risposte anticipatamente ciao a presto

Ultima modifica di Geolux : 11-01-2006 alle 10:31.
Geolux è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2006, 10:50   #2
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
eseguito sulla mia macchina copia tranquillamente i file, sei sicuro di eseguirlo con un utente che puo' leggere e scrivere i file in questione?
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2006, 11:00   #3
Ultrabyte
Member
 
Iscritto dal: Jan 2006
Messaggi: 65
Quote:
Originariamente inviato da kingv
eseguito sulla mia macchina copia tranquillamente i file, sei sicuro di eseguirlo con un utente che puo' leggere e scrivere i file in questione?
bhe con un mio amico passandogli il .class appena compilato abbiamo anche usato prima il comando chmod 777 sul file originale ( ovvero mettendo tutti i premessi sul file ) anche a lui dava errore cmq a te su linux funziona ?

ah poi importantissimo potrei sapere la tua jdk di java? Per sapere se magari dipende anche da quello io in questo momento uso la jdk 1.4.2

(mi riferisco a te Kingv sono sempre geolux ma con un altro account )

Ultima modifica di Ultrabyte : 11-01-2006 alle 11:26.
Ultrabyte è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2006, 12:13   #4
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
[alessio@alessio 0.15]$ java -version
java version "1.4.2_04"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)


ma che errore ti da esattamente? posta il messaggio.
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 11:30   #5
Ultrabyte
Member
 
Iscritto dal: Jan 2006
Messaggi: 65
Guarda kingv alla fine sono riuscito a venirne a capo il problema era un fatto di permessi visto che il .java appartenete ad un gruppo veniva compilato con la root ecco il motivo convinto una volta cambiato utente e gruppo con il chown ho risolto la questione...ma c'è un però. Ora ho un altro problema ancora piu ostico da superare ....ovvero adesso i file copia senza problemi con la maggior parte dei file ...ma con alcuni di essi mi crea dei problemi ovvero un esempio è con i file di tipo immagine o .doc mi è stato consigliato di usare la classe FileChannel che onestamente ancora nn conosco ma che sto andando a capire ma la trovo molto complicata come soluzione...conoscete un modo efficace per copiare qualsiasi tipo di file. Grazie ancora del supporto ragazzi
Ultrabyte è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 12:48   #6
pinok
Senior Member
 
Iscritto dal: Jun 2001
Città: Alessandria (provincia)
Messaggi: 4772
A mio avviso il problema è nel readLine() che probabilmente si impalla quando trova dei caratteri di fine linea \n
ReadLine, a memoria, è per i file di testo.
Per fare una copia blind devi andare su una gestione binaria dello stream.
Ad esempio potresti guardare quant'è lungo il file da copiare, usare il read(byte[]) con byte[] oportunamente dimensionato e poi usare il write per riscriverlo.
Non ti conviene impostare la lunghezza di byte[] a tutto il sistema, perché se il file è grande "satolli" la memoria, non ti conviene troppo piccolo perché fai troppe letture scritture.
Ad es. puoi leggere "fette" di bytes da 100kb e scriverle, stando attento che l'ultima fetta (o anche la prima se il file è più piccolo) abbia l'array dimensionato alla dimensione residua del file da leggere (metodo available()), in modo da non sconfinare.

Poi magari ci sono soluzioni più eleganti, ma così al 99,9% dovrebbe funzionare.
pinok è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 14:18   #7
Ultrabyte
Member
 
Iscritto dal: Jan 2006
Messaggi: 65
Veramente sto provando con le classi della libbreria java.nio.Channel pultroppo lavorando sulla jdk 1.4.2_01 ho dei problemi con il metodo trasfetTo()....e trasfetfrom() ...voi avete provato nulla del genere ???
Ultrabyte è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 14:39   #8
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
a me sembrano abbastanza semplici, utilizzando java.nio la copia puoi farla con qualscosa tipo:


Codice:
try
{
        FileChannel src = new FileInputStream("./sorgente").getChannel();
        FileChannel dst = new FileOutputStream("./destinazione").getChannel();
    
        dst.transferFrom(src, 0, src.size());
    
        src.close();
        dst.close();
}
catch (IOException e)
{
	//gestione di e
}
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 17:05   #9
Ultrabyte
Member
 
Iscritto dal: Jan 2006
Messaggi: 65
Grazie mille si io avevo un idea del genere cmq alla fine con un mio amico siamo arrivati a creare questo metodo per copiare qualsiasi file a chi potesse servire eccovelo qui



public static void copiaFile(String s, String d)throws Exception
{

File sorgente = new File(s);
FileOutputStream destinazione = new FileOutputStream(d);
FileInputStream is = new FileInputStream(sorgente);
long length = sorgente.length();
byte[] 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;
}

is.close();

destinazione.write(bytes);
destinazione.close();

}
Ultrabyte è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 17:08   #10
Ultrabyte
Member
 
Iscritto dal: Jan 2006
Messaggi: 65
Che poi a pensarci bene si potrebbe inserire direttamente nei FileImput e Output i phat cmq alla fine ce l'abbiamo fatta grazie dell' aiuto fornito è stato di grande aiuto ciao raga se posso aiutare lo farò voletieri
Ultrabyte è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 22:44   #11
GiulioCesare
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 364
Quote:
Originariamente inviato da Ultrabyte
public static void copiaFile(String s, String d)throws Exception
{

File sorgente = new File(s);
FileOutputStream destinazione = new FileOutputStream(d);
FileInputStream is = new FileInputStream(sorgente);
long length = sorgente.length();
byte[] 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;
}

is.close();

destinazione.write(bytes);
destinazione.close();
}

Cavolo, questo codice mi sembra, che già l'ho visto da qualche parte
GiulioCesare è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2006, 00:08   #12
pinok
Senior Member
 
Iscritto dal: Jun 2001
Città: Alessandria (provincia)
Messaggi: 4772
Quote:
Originariamente inviato da Ultrabyte
(mi riferisco a te Kingv sono sempre geolux ma con un altro account )
Immagino che il moderatore stia facendo le capriole di gioia...
Non me ne ero ancora accorto dei doppi nick

Comunque il metodo che hai scritto tu temo implementi l'errore che ti avevo suggerito di evitare: se il file di origine è 50Mb, ti instanzi un array da 50Mb, che non è proprio il massimo
pinok è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2006, 11:09   #13
GiulioCesare
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 364
Quote:
Originariamente inviato da pinok
Comunque il metodo che hai scritto tu temo implementi l'errore che ti avevo suggerito di evitare: se il file di origine è 50Mb, ti instanzi un array da 50Mb, che non è proprio il massimo
Allora secondo te, come si potrebbe trovare una soluzione alternativa? Considerando però, che l'unica soluzione da prendere in considerazione, per il problema, è effettuare comunque una copia byte a byte del file
GiulioCesare è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2006, 13:14   #14
pinok
Senior Member
 
Iscritto dal: Jun 2001
Città: Alessandria (provincia)
Messaggi: 4772
Quote:
Originariamente inviato da GiulioCesare
Allora secondo te, come si potrebbe trovare una soluzione alternativa? Considerando però, che l'unica soluzione da prendere in considerazione, per il problema, è effettuare comunque una copia byte a byte del file
L'avevo già scritto poco sopra, comunque riporto:
Quote:
Originariamente inviato da pinok
Ad esempio potresti guardare quant'è lungo il file da copiare, usare il read(byte[]) con byte[] oportunamente dimensionato e poi usare il write per riscriverlo.
Non ti conviene impostare la lunghezza di byte[] a tutto il sistema, perché se il file è grande "satolli" la memoria, non ti conviene troppo piccolo perché fai troppe letture scritture.
Ad es. puoi leggere "fette" di bytes da 100kb e scriverle, stando attento che l'ultima fetta (o anche la prima se il file è più piccolo) abbia l'array dimensionato alla dimensione residua del file da leggere (metodo available()), in modo da non sconfinare.
In pratica, guardi la lunghezza del file che può essere X, la dividi per (100*1024), cioè 100kb, e l'intero che ottieni è il numero di volte che puoi fare il loop allocando array da 100Kb.
Il resto della divisione (X%102.400) è la dimensione dell'array che leggi in chiusura per completare la copia (la famosa fetta sotto dimensionata).

Se X<102.400, allochi direttamente un array di dimensioni pari a X.
pinok è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2006, 13:21   #15
pinok
Senior Member
 
Iscritto dal: Jun 2001
Città: Alessandria (provincia)
Messaggi: 4772
Quote:
Originariamente inviato da GiulioCesare
è effettuare comunque una copia byte a byte del file
Altra cosa: avevo letto male il codice.
Non capisco a cosa vi serva gestire l'offeset !

Qua

numRead=is.read(bytes, offset, bytes.length-offset)

State leggendo già in una botta sola l'intero file e lo mettete in bytes[].
Se l'operazione riesce, finisce subito e il while non serve.
Se l'operazione fallisce, ad es. perché legge solo 1/10 del file, spostate avanti l'offset di 1/10 e ripetete l'operazione saltando il primo decimo...
A me sembra cannato e se funziona, funziona solo in virtù che imbrocca alla prima la lettura completa.
Codice:
int offset = 0;
int numRead = 0;
while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0)
{
offset += numRead;
}
pinok è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
La missione Artemis II con il razzo spaz...
Blue Origin propone di utilizzare Blue R...
Sora all'interno di ChatGPT: aumentano g...
L'Ufficio dell'Ispettore Generale ha ana...
Primo contatto con Volvo ES90: ammiragli...
La Cina potrebbe puntare con maggiore de...
Un clamoroso errore strategico: il nuovo...
Cos’è il nuovo cartello del "...
HP: gli attacchi con l'IA puntano su vel...
Acer compie 50 anni e si trasforma: dall...
La rete elettrica USA funziona solo a me...
La Corte Costituzionale albanese: 'Il ba...
Secondo trailer del nuovo anime di Ken i...
La guerra tra Russia e Ucraina arriva co...
KadNap: il botnet che ha infettato 14.00...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v