Robot Revue 07/2010

Objektové programování v Javě (6. část – práce se soubory III)

9.7.2024


Dnešní práce se bude zabývat opět datovými proudy. Nejprve se pokusíme vyřešit jednoduchý úkol. Kolik znaků obsahuje daný soubor? Postup bude jednoduchý. Otevřeme vstupní proud <b>InputStream</b> a znaky načteme jeden po druhém. <pre>
package data;
.
import java.io.FileReader;
import java.io.IOException;
.
public class CharacterCounter {
.
/**
* Vytvoříme metodu, která vrátí počet
* znaků v souboru
*
* @param file
* @return
* @throws IOException
*/
.
public int getNumberOfCharactersInFile(
String file) throws IOException {
.
FileReader inputStream = null;
// Vytvořím si proměnnou, do které
// budeme ukládat počet načtených
// znaků
int counter = 0;
try {
// Vytvořím vstupní proud
inputStream = new FileReader(file);
.
int c;
// čtu znak po zanku metodou read
// (pokud vrátí -1 pak už není možné
// další znak číst = jsme na konci
// souboru)
while ((c = inputStream.read()) != -1)
{
// zvednu hodnotu proměnné counter o
// jednotku
counter++;
// nebo provedu konstrukci (counter
// =
// counter + 1);
// nebo provedu tuto konstrukci
// (counter +=counter);
}
}
finally {
if (inputStream != null) {
inputStream.close();
}
}
return counter;
}
}
</pre> ...

Soubory ke stažení

CountTester.java
CharacterCounter.java

Diskuse

připomínky ke kódu

17.8.2024 20:24, Lojza

Myslím, že zvolené příklady nejsou napsány zrovna dobře a jako výuková ukázka tak IMHO nejsou vhodné 1. výtka - chyba v ukázce kódu v komentáři konstrukce counter += counter jako náhrada counter++ je IMO špatně 2. výtka - použité prostředky Použité prostředky by měly odpovídat účelu. Detekce číslic pomocí Regexpu je neefektivní atomovka na vrabce. Navíc je regexp uveden jako jediné možné a zmíněné využití výjimky je v tomto případě šílenost. Možný lepší kód: ----- public int getNumberOfDigitsInFile2(String file) throws IOException{ FileReader inputStream = null; int counter = 0; try{ inputStream = new FileReader(file); int c; while( (c = inputStream.read())!=-1){ byte znak = (byte)c; // lze porovnavat primo znaky, regexp na detekci cislice je atomovka na vrabce if(znak >= '0' && znak <= '9') counter++; } }finally{ if(inputStream != null) inputStream.close(); } return counter; } ----- 3. výtka - optimalizace kódu Vytvářet konstantní regexp v každém cyklu je IMO zbytečné ------ public int getNumberOfPatterns2(String file, String pattern)throws IOException{ FileReader inputStream = null; int counter = 0; try{ inputStream = new FileReader(file); int c; // Pattern vytvarime jen jednou pred cyklem Pattern p = Pattern.compile(pattern); while( (c = inputStream.read())!=-1){ String value = new String(new byte[]{(byte) c}); Matcher m = p.matcher(value); if(m.find()) counter++; } }finally{ if(inputStream != null) inputStream.close(); } return counter; } ------ Za případné chyby se omlouvám, v javě neprogramuji. Ale podstata je doufám zřejmá.

Nový příspěvek

Diskuse je moderována a diskusní příspěvky jsou zobrazeny až po schválení.

Nadpis
Text
Kontrolní kód
Opište kód

Přihlášení / Registrace

Jméno:

Heslo:

Registrace
Zapomenuté heslo




Krátké zprávy

Soutěž Napájení Sluncem

21.8.2024

Katedra měřicí a řídicí techniky, Fakulta elektrotechniky a informatiky, Vysoká škola báňská - Technická univerzita Ostrava pořádá soutěž malých robotů, napájených buď solárním článkem, nebo s vodíkovým pohonem. Registrace do soutěže končí 31. 12. 2010, vlastní soutěž pak proběhne 25. 1. 2011.

Napájení Sluncem

RobOlympics 2010

1.6.2024

Osmá robotická olympiáda se koná 20. listopadu 2010 na Vysoké škole technické (Hochschule für Technik) v Rapperswilu. Soutěží se ve dvou kategorích: 1. Mindstorms (Lego) 2. OpenClass Přihlášky do soutěže budou přijímány od začátku června 2010.

RobOlympics 2010

Antimov - soutěž naruby

10.8.2024

SparkFun pořádá soutěž robotů v porušování Asimových zákonů robotiky (s výjimkou prvního). Dle zadání soutěže musí robot s co největším usilím vykonat nějakou nesmyslnou a zbytečnou věc, počínat si při tom pokud možno nešikovně a nakonec se sám zničit. Má na to celkem tři pokusy.

Antimov 2010


© 2009 Datastore, spol. s r.o.