Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-01-2006, 09: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 09:31.
Geolux è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2006, 09: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, 10: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 10:26.
Ultrabyte è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2006, 11: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, 10: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, 11: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, 13: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, 13: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, 16: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, 16: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, 21: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 12-01-2006, 23: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, 10: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, 12: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, 12: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


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Space Pioneer starebbe realizzando un pr...
SpaceX ritirerà ''a breve'' il Fa...
La Luna ha un nuovo cratere di grandi di...
ROG Cronox: ASUS alza l'asticella dei ca...
Lenovo annuncia nuovi sistemi per la vir...
M6 e M5 Ultra, i primi benchmark conferm...
La nuova falla della cybersecurity &egra...
The Blood of Dawnwalker, il sequel potre...
Colpiti i data center Amazon: irrecupera...
Google Wallet, nuova interfaccia in arri...
iPhone Duo, problemi di produzione per i...
Firefox diventa più veloce con PDF e JPE...
WhatsApp, arriva su iOS la nuova scorcia...
Snap presenta Specs: realtà aumentata, c...
SteamOS verso un cambiamento epocale: ar...
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: 21:35.


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