import opencard.core.service.SmartCard;
import opencard.core.service.CardRequest;
import opencard.opt.iso.fs.FileAccessCardService;
import opencard.opt.iso.fs.CardFile;

public class HelloSmartCard
{
  public static void main(String[] args)
  {
    System.out.println("writing Hello SmartCard ... ");
    try
    {
      // OCF initializieren
      SmartCard.start();

      // OCF wartet auf eine Chipkarte, die ein Dateisystem unterstützt
      CardRequest cr = new CardRequest(FileAccessCardService.class);
      SmartCard sc = SmartCard.waitForCard(cr);

      // auf die Chipkarte schreiben
      FileAccessCardService facs = (FileAccessCardService)
              sc.getCardService(FileAccessCardService.class, true);
      CardFile root = new CardFile(facs);
      CardFile file = new CardFile(root, ":c009");

      // Hiermit werden die Daten in die Datei auf der SmartCard
geschrieben
      facs.write(file.getPath(), 0, "HelloSmartCard".getBytes());

      // Lesen der Daten von der Chipkarte und
      // Ausgabe auf dem Bildschirm
      System.out.println(new String(facs.read(file.getPath(), 0,
file.getLength())));
      sc.close();
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }

    finally
    {
      // auch beim Beenden von OpenCard Framework sollten eventuell
auftretende Fehler
      // ausgegeben werden
      try
      {
        SmartCard.shutdown();
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    }
    System.exit(0);
  }
}

