Objekt einer Datei verschieben, aber Verzeichnispfad fehlt

ForenDaddy

Aktives Mitglied
Kann man eine Datei, die man nur als Objekt zurückbekommen hat, kopieren/verschieben etc ohne den Verzeichnispfad zu kennen?

Hintergrund ist der, ich habe über die API jMTP Zugriff auf ein Gerät, das mir ein Objekt zurückgibt, dass eine Datei darstellt. Ein Bild oder ein Video.
Ich möchte diese Datei nun speichern. Aber leider erhalte ich keinen Verzeichnispfad von der API, mit dem ich arbeiten könnte. Ich habe den Verzeichnispfad mir zwar selbst zusammengebaut, aber er entspricht nicht der üblichen Zugriffsmöglichkeit, wie "c:\trallala", sondern eher "DEVICE\Phone\DCIM\trallala".
Das Objekt scheine ich aber in Händen zu halten.
Ich müsste es nur irgendwie kopieren können.
FileInputStream schlägt da fehl, weil es eben nach einem konkreten Pfad verlangt.
 
Moin,

Kann man eine Datei, die man nur als Objekt zurückbekommen hat, kopieren/verschieben etc ohne den Verzeichnispfad zu kennen?

Hintergrund ist der, ich habe über die API jMTP Zugriff auf ein Gerät, das mir ein Objekt zurückgibt, dass eine Datei darstellt. Ein Bild oder ein Video.
Ich möchte diese Datei nun speichern. Aber leider erhalte ich keinen Verzeichnispfad von der API, mit dem ich arbeiten könnte. Ich habe den Verzeichnispfad mir zwar selbst zusammengebaut, aber er entspricht nicht der üblichen Zugriffsmöglichkeit, wie "c:\trallala", sondern eher "DEVICE\Phone\DCIM\trallala".
Das Objekt scheine ich aber in Händen zu halten.
Ich müsste es nur irgendwie kopieren können.
Was meinst Du mit übliche Zugriffsmöglichkeit ?
Prinzipiell solltest Du zum Speichern jeden beliebigen Pfad angeben könnten (falls nicht existent, vor mit mkdir() anlegen)


FileInputStream schlägt da fehl, weil es eben nach einem konkreten Pfad verlangt
Was schlägt fehl?
Was für einen konkreten Pfad ?

Post mal mehr Code !

Gruß
Klaus
 
üblich Zugriffsmöglichkeit wäre z.B. "c:\DCIM\100MSDCF\DSC00715.JPG"
also eine konkrete pfadangabe.

die ich aber nicht bekomme von dem Gerät, in diesem Fall ein Sony Ericsson Handy.
ich bekomme im besten falle das: "DEVICE\Memory Stick (TM)\DCIM\100MSDCF\DSC00715.JPG".
das kommt aber nicht von der API, sondern habe ich mir aus den namen der ganzen parents und childs zusammengedocktert. tatsächlich bekomme ich nur "DSC00715.JPG" als Objekt, um genau zu sein ein ProtableDeviceObject, zurück.
das Objekt selber hat aber leider keine Methoden, mit denen ich das weiter auswerten oder verarbeiten kann.
 
Was stellt ein "ProtableDeviceObject" dar? So was ähnliches wie ein File Objekt. Damit kann man ja erst einmal nicht viel machen.
Ich würde aber mal vermuten, dass diese lib auch Klassen und Methoden zum auslesen der Daten bietet.
 
leider stellt es keine methoden zur Verfügung, die das können. sinnigerweise gibt es delete.
aber damit hat es sich auch schon.
der rest sind set/get/is.

hier mal der link zum projekt:
/trunk/java/src/ - jmtp - Java API to access MTP compatible portable media players - Google Project Hosting

mein code bisher. achtung, sieht hässlich wie die nacht aus.
damit erhalte ich eine liste aller dateien, die ich mit dem handy auf der speicherkarte abgelegt habe.
Java:
public static void jmtpTest() {
        // Create the manager
        PortableDeviceManager manager = new PortableDeviceManager();
        // Get list of connected devices
        PortableDevice devices[] = manager.getDevices();
        
        for(PortableDevice device : devices ) {
            // Open the device
            device.open();
            // If device is a MEDIA_PLAYER, not a USB-Stick or something else
            if ( device.getType() == PortableDeviceType.MEDIA_PLAYER ) {
                // Get Root Objects like internal Memory or memory card
                for(PortableDeviceObject object : device.getRootObjects()) {
                    // If object can save data (is storage)
                    if ( object instanceof PortableDeviceStorageObject && object.getName().toLowerCase().equals( "memory stick (tm)" ) ) {
                        PortableDeviceStorageObject storage = (PortableDeviceStorageObject)object;
                        // get list of files
                        PortableDeviceObject paths[] = storage.getChildObjects();
                        for ( PortableDeviceObject path : paths ) {
                            // search files for the image folder
                            if ( path.getOriginalFileName().toLowerCase().equals( "dcim" ) && path instanceof PortableDeviceFolderObject ) {
                                // get list of files again and search till you find no more folders
                                PortableDeviceFolderObject testPath = (PortableDeviceFolderObject)path;
                                PortableDeviceObject testPaths[] = testPath.getChildObjects();
                                for ( PortableDeviceObject folderAgain : testPaths ) {
                                    if ( folderAgain instanceof PortableDeviceFolderObject ) {
                                        PortableDeviceFolderObject testPathFolderAgain = (PortableDeviceFolderObject)folderAgain;
                                        PortableDeviceObject testPathsFolderAgain[] = testPathFolderAgain.getChildObjects();
                                        // the file as an object that i have found but don't know how to copy or move it.
                                        // path of file (filePathAfterAll) is not working for a FileInputStream with or withou object.getParent()
                                        for ( PortableDeviceObject thefile : testPathsFolderAgain ) {
                                            File filePathAfterAll = new File( object.getParent() + "/" +
                                                                              object.getName() + "/" +
                                                                              path.getOriginalFileName() + "/" +
                                                                              folderAgain.getOriginalFileName() + "/" +
                                                                              thefile.getOriginalFileName() );
                                            System.out.println( filePathAfterAll );
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
 
Moin,

mein code bisher. achtung, sieht hässlich wie die nacht aus.
Jau :shock: 😀

Java:
File filePathAfterAll = new File( object.getParent() + "/" + object.getName() + "/" +
                             path.getOriginalFileName() + "/" folderAgain.getOriginalFileName() + "/" +
                             thefile.getOriginalFileName() );
Wie sehen denn die Teile im Einzelnen aus, die Du hier zusammenbastelt ?

Gruß
Klaus

EDIT: BTW, in Deinem ersten Post waren es noch Backslashes "\" !!
 
obiger codeausschnitt gibt das hier aus:

"DEVICE\Memory Stick (TM)\DCIM\100MSDCF\DSC00715.JPG" (file wandelt slashes in backslashes).

Java:
object.getParent() + "/" + //-> DEVICE
object.getName() + "/" + //-> Memory Stick (TM)
path.getOriginalFileName() + "/" //-> DCIM
folderAgain.getOriginalFileName() + "/" + //-> 100MSDCF
thefile.getOriginalFileName() ); //-> DSC00715.JPG

das ist die datei die ich z.B. suche.
ich weiss also faktisch wo sie liegt, kann sie aber nicht anfassen.
ich hatte auch schon überlegt, ob der manager oder das device selber mir über die id der datei mir etwas an die hand gibt. aber konnte bisher nichts finden.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben