PDA

View Full Version : IFSFileOutputStream Komplette Files übergeben!



Deficiency
28-03-07, 12:45
Hallo!

Ich habe ein Problem. Und zwar scann ich Bilder ein, die liegen auf der Platte meines PC. Ich will sie nun auf die iSeries bekommen. Ich hab mir gedacht, nimm IFS. Aber wenn ich das Bild wieder einlese und dann die bytes rauslese, und dann per IFSFileOutputStream auf die iSeries packe, kann ich die Datei nicht mehr öffnen (Ist ein Tiff). Mir geht die Codierung warscheinlich verloren, beim vielen hin und herschaufeln. Meine Frage:

Gibt es eine Möglichkeit die File direkt a la copy und paste auf die iSeries zu bekommen? Mir fällt nix ein!

Vielen Dank

Flo

mk
28-03-07, 12:49
Hallo Flo,

erstelle auf der AS/400 mit dem Operation Navigator
eine Netzlaufwerksfreigabe.

Anschließend die Datei mit dem Windows Explorer kopieren.

Der Netsever wird mit dem Befehl
STRTCPSVR SERVER(*NETSVR) gestartet

Das war es auch schon.

Gruss
Michael

Deficiency
28-03-07, 12:57
Danke für die Schnelle Antwort!

Aber das Problem ist, das das Kopiertool an anderen Arbeitsplätzen auch genommen wird, und da nicht sicher ist ob die Netzlaufwerksfreigabe vorhanden ist muss /soll es komplett über Java erfolgen! Der Weg über Windows fällt zu 99 % flach!

Fuerchau
28-03-07, 12:59
Wenn die Freigabe über den Netserver erteilt wurde und eine Gast-Profil eingerichtet ist, kann der Zugriff direkt per UNC-Namen "\\MyAs400\Freigabe\File (file://\\MyAs400\Freigabe\File)" erfolgen.
Ich denke, auch Java hat eine einfache FileCopy-Funktion.

Deficiency
28-03-07, 13:13
Mein Versuch über Java, war dieser..



Image img2 =Jimi.getImage("C:\\Programme\\Scan\\" + name+ i + ".tif");

while(img2.getWidth(bla)==-1){

System.out.println("not Yet");

}


IFSFile myFile = new IFSFile(as400, "/data/PROD/nvonline/archiv/BST041/"+name+i+".tif");
BufferedImage bi2 = createBufferedImage(img2);
try {



IFSFileOutputStream IFSfos = new IFSFileOutputStream(myFile);
byte[] data = ((DataBufferByte) bi2.getData().getDataBuffer()).getData();

IFSfos.write(data);
IFSfos.close();

} catch (AS400SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



Aber mir geht die Tiff Codierung verloren, so dass es nicht möglich ist, die Tiff nach dem Senden an die AS400 zu öffnen!

Ich werde mal das mit dem Gastzugriff ansehen Danke für den Tipp

Fuerchau
28-03-07, 14:00
Ich denke mal, du musst irgendwo den Binär-Modus angeben, da ggf. eine Code-Wandlung in eine andere CCSID erfolgt.

RobertPic
28-03-07, 14:04
Ich wette eine Flasche Wein, dass dir die Freigabe auch nichts hilft.:D

In dem Source wird die Grafik in das Java-interne Raster Format (so eine Art Rawdatei) konvertiert. Wenn man das ausgibt, hat das nichts mehr mit Tiff zu tun.

Wenn man eine Datei kopieren will, dann holt man sich den InputStream und legt vielleicht noch einen Buffer dazwischen.


Gruß
Robert

BenderD
29-03-07, 08:12
Hallo,

da sind (mindestens) zwei Probleme im Spiel:
dein Image macht aus dem TIFF ein Objekt, das lokal (unter Windows) als Grafik darstellbar ist, zum rausschreiben nimmst du was aus der Spielzeugkiste Toolbox, das ein Streamfile auf einer AS400 repräsentiert und schaufelst dann ByteArrays aus einem (Windows) Image in ein (AS400) Streamfile, da steht dann zwar was drin, aber eben nicht das, was drin stehen soll, das ist mehr als ein Codepage Problem!
- es darf keine Interpretation der Grafikdaten stattfinden
- Finger weg von dem Toolboxkram, wo man ihn nicht braucht!
weiter ist deine Sicherheitsabfrage (while(img2.getWidth(bla)==-1)) noch verdächtig, das sieht wiedr mal nach HaufenkackerGraberPrinzip aus, wenn da nämlich gerade was am scannen ist, dann wird da Murks kopiert!
Mit irgendwelchen gemapten Laufwerken und Oops Nerv kannst du das höchstens mit zusätzlicher Hilfe eines Lego Roboters automatisieren.
Der Vorschlag von Robert (read aus FileInputStream write in FileOutputStream könnte klappen, allerdings macht der Konstruktor von FileOutputStream auch wieder was Betriebssystem spezifisches, was durchaus Nebenwirkungen haben könnte.
Am sichersten und einfachsten scheint mir hier eigentlich good old FTP, das man auch aus Java ausführen kann (den erforderlichen Client kann man von z.B. Apache holen), da hier der erforderliche binary Mode explizit vorgesehen ist.

mfg

Dieter Bender


Hallo!

Ich habe ein Problem. Und zwar scann ich Bilder ein, die liegen auf der Platte meines PC. Ich will sie nun auf die iSeries bekommen. Ich hab mir gedacht, nimm IFS. Aber wenn ich das Bild wieder einlese und dann die bytes rauslese, und dann per IFSFileOutputStream auf die iSeries packe, kann ich die Datei nicht mehr öffnen (Ist ein Tiff). Mir geht die Codierung warscheinlich verloren, beim vielen hin und herschaufeln. Meine Frage:

Gibt es eine Möglichkeit die File direkt a la copy und paste auf die iSeries zu bekommen? Mir fällt nix ein!

Vielen Dank

Flo

Deficiency
29-03-07, 08:18
Das mit FTP muss ich prüfen... weis net ob das bei unserer AS400 an ist!?!?!

Wenn ich bei doch bei IFS bleibe, vielleicht könnt ihr mir dann nochmal helfen. Und zwar will ich die Datei per Stream lesen und schreiben (wie Robert gesagt hat)
Dies erfolgt leider Byte weise, bei ner Großen Datei treib ich die Auslastung der Maschine nach oben. Kann ich die Datei nicht in einem Rutsch schreiben? Hab bei Mr. Google nix gefunden!

Thx Flo

BenderD
29-03-07, 09:33
Hallo,

da reicht es aus, wenn du über den FileInputStream einen BufferedReader drüber legst, also irgendwas in der Art:

FileInputStream fis = new FileInputStream(...);
BufferedReader buffy = new BufferedReader(fis);

lesen kannst du weiterhin aus fis

mfg

Dieter Bender



Das mit FTP muss ich prüfen... weis net ob das bei unserer AS400 an ist!?!?!

Wenn ich bei doch bei IFS bleibe, vielleicht könnt ihr mir dann nochmal helfen. Und zwar will ich die Datei per Stream lesen und schreiben (wie Robert gesagt hat)
Dies erfolgt leider Byte weise, bei ner Großen Datei treib ich die Auslastung der Maschine nach oben. Kann ich die Datei nicht in einem Rutsch schreiben? Hab bei Mr. Google nix gefunden!

Thx Flo