Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.java > #9107

Re: Leggere lo stesso file TANTE volte

Path csiph.com!news.redatomik.org!aioe.org!.POSTED!not-for-mail
From "Dr.UgoGagliardelli" <do.not.spam@me.please>
Newsgroups it.comp.java
Subject Re: Leggere lo stesso file TANTE volte
Date Fri, 30 Jun 2017 12:41:29 +0200
Organization Aioe.org NNTP Server
Lines 51
Message-ID <oj59tm$1uum$1@gioia.aioe.org> (permalink)
References <oj3lno$1c9h$1@gioia.aioe.org> <oj3olm$625$1@virtdiesel.mng.cu.mi.it> <oj4p6f$vsr$1@gioia.aioe.org>
NNTP-Posting-Host EKOb9gxv6vG08agtW1ZOBA.user.gioia.aioe.org
Mime-Version 1.0
Content-Type text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding 8bit
X-Complaints-To abuse@aioe.org
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1
Content-Language it-IT
X-Notice Filtered by postfilter v. 0.8.2
X-Antivirus-Status Clean
X-Antivirus Avast (VPS 170629-0, 29/06/2017), Outbound message
Xref csiph.com it.comp.java:9107

Show key headers only | View raw


Il 30.06.2017 07.56, Oliviero ha scritto:
>> Sinceramente pensavo che la tua fosse una domanda così banale da meritare
>> un laconico RTFM. In realtà non è così, in quanto sostanzialmente
>> BufferedReader sembrerebbe non essere pensato per un uso simile. In 
>> pratica,
>> hai due modi per ottenere quello che vuoi:
>>
>>   - Il primo è impostare sul BufferedReader un marcatore subito dopo 
>> averlo
>>     aperto, in modo tale che eseguendo un reset il puntatore ritorni a
>>     quell'area del file.
>>   - Il secondo è usare un RandomAccessFile al posto del 
>> BufferedReader, che ti
>>     permette di fare un seek del puntatore all'inizio del file
>>
>> Enrico
> 
> Grazie della risposta.
> Come faccio a impostare il marcatore?
Qualsisi classe che estenda java.io.Reader, quindi anche BufferedReader, 
ha anche i metodi:
- boolean markSupported()
- public void mark(int limit)
- public void reset()
se markSupported() risponde true, allora puoi usare sia mark che reset.

Per utilizzare mark, devi specificare il limite fino a quando il mark 
sara' valido, facendo attenzione che se questo limite e' troppo grande, 
il reader allocara' un nuovo buffer grande almeno come il limite imposto.
Avrai fatto caso che limit e' di tipo int, quindi il buffer sara' al 
massimo grande Integer.MAX_INT, ma il file che stai leggendo potrebbe 
essere molto piu' grande, quindi l'operazione mark/reset allo scopo di 
riposizionare il reader all'inizio non avrebbe senso. Nel caso che il 
file sia di dimensioni contenute, allora potresti usare il codice:

File f=new File("C:/miofile.txt");
long length = f.length();
if (length <= Integer.MAX_VALUE) {
   int limit = (int) length;
   FileReader fileReader=new FileReader(f);
   reader=new BufferedReader(fileReader, limit);
   reader.mark(limit);
   ...
   // rileggo dall'inizio
   reader.reset();
   ...
}

Guardare la documentazione qui 
https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html e' 
comunque il miglior consiglio.

Back to it.comp.java | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Leggere lo stesso file TANTE volte Oliviero <abcxyz@micso.net> - 2017-06-29 21:51 +0200
  Re: Leggere lo stesso file TANTE volte Enrico Bianchi <enrico.bianchi@ymail.com> - 2017-06-29 20:41 +0000
    Re: Leggere lo stesso file TANTE volte Oliviero <abcxyz@micso.net> - 2017-06-30 07:56 +0200
      Re: Leggere lo stesso file TANTE volte Enrico Bianchi <enrico.bianchi@ymail.com> - 2017-06-30 06:55 +0000
      Re: Leggere lo stesso file TANTE volte "Dr.UgoGagliardelli" <do.not.spam@me.please> - 2017-06-30 12:41 +0200
  Re: Leggere lo stesso file TANTE volte 4ndre4 <a.laforgia@gmail.com> - 2017-06-29 14:06 -0700

csiph-web