Notions de base - lecture/écriture de fichiers distants à l'aide de Java
J'ai commencé avec l'exigence de la lecture et de l'écriture de fichiers à partir de/dans un répertoire à distance sur une machine Ubuntu.
Tout d'abord, j'ai écrit un programme en Java qui pourraient lire,d'écrire des fichiers à partir d'un dossier partagé sur un ordinateur Windows distant j'.e sur un réseau local. Ici, quelque chose comme cela fonctionne sur mon(local) d'une machine Windows :
File inputFile = new File(
"\2.17.89.76\EBook PDF");/*ignore the syntax errors, the loc is just for the idea*/
Maintenant quand je pense à distance une machine Ubuntu, évidemment je ne peux pas faire quelque chose comme ce que la machine n'est pas sur le réseau local(je ne suis pas sûr si cela peut être fait, même si c'est sur le LAN!). Donc, j'ai essayé une des approches suivantes :
- À l'aide de Jsch, l'établissement de la confiance entre les deux machines(local - distant Linux , Linux à distance - distance Linux) et écriture dans un fichier en utilisant le protocole sftp.(fait)
- L'exécution de prises de courant sur les deux machines: un émetteur, un récepteur(Java)(fait)
- Essayant d'atteindre des I/O comme l'extrait de code pour Windows (LAN) machines(non atteint)
Tout en faisant toutes ces choses, j'ai eu beaucoup de requêtes, de lire de nombreux messages, etc. et j'ai senti qu'il me manque quelque chose sur les fondamentaux :
- Une sorte de renforcement de la confiance(entre les deux machines) utilitaire sera nécessaire pour atteindre IO. Mais enfin, je veux écrire un code comme dans l'extrait donné, indépendamment de la machine, réseau, etc.
- La Jsch solution et d'autres ont suggéré(utilisation de http, ftp, etc. au cours de l'URL) enfin utilisez certains des services qui sont en cours d'exécution sur la machine distante. En d'autres termes, ce n'est PAS QUE Java IO est utilisé pour accéder au système de fichiers à distance - ce qui ne fait pas appel à moi comme je suis en s'appuyant sur les services plutôt que d'utiliser le bon vieux I/O.
- Samba, SSHFS trop sauté sur la scène, uniquement pour l'ajouter à ma confusion. Mais je ne les vois pas comme des solutions à mon objectif !
De réitérer, je veux écrire un code à l'aide de Java I/O(la plaine ou nio, les deux sont très bien) qui ne peuvent tout simplement de lire, d'écrire des fichiers à distance, sans utilisation de services sur des protocoles comme le ftp, http, etc. ou de la prise émetteur-récepteur modèle. C'est mon attente est-elle valide?
- Si non, pourquoi et quel est le mieux que je puisse faire pour lire/écrire des fichiers à distance
à l'aide de Java? - Si oui, comment atteindre le même !
P. S : s'il vous Plaît commentaire dans le cas où j'ai besoin d'élaborer de poser ma question avec précision !
Java est dépendante à un certain niveau sur le système d'exploitation pour faire l'OI - même le bon vieux IO utilise ces - ainsi, un peu moins clair, ce que votre question met l'accent sur.
J'ai vérifié, mais je ne pense pas que mon exigence a rien à faire avec le fichier "type"; en outre, il prend en charge la lecture des fichiers via FTP,SFTP,HTTPS, etc. ce que je ne souhaite pas utiliser. Merci et salutations !
Je veux exécuter du code Java sur la Machine1, ce qui crée un java.io.Objet de fichier pointant vers un fichier sur Machine2. Quelques possibilités : 1. Machine1 et Machine2 peut être Windows-Linux, Windows-Windows, Linux-Linux 2. Peut être sur des réseaux différents(pas nécessairement sur le LAN)
Je pense que votre mieux, hors de la boîte, solution, si vous ne voulez pas télécharger le fichier localement est une sorte de partage réseau, quelque chose comme smb
OriginalL'auteur Kaliyug Antagonist | 2012-09-27
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez accéder à un système de fichiers sur un ordinateur distant, puis cet ordinateur a à faire de son système de fichiers disponibles avec un service. Un tel service est généralement une tâche en arrière-plan, qui gère les demandes et renvoie une réponse, par exemple pour l'authentification, l'autorisation, de la lecture et de l'écriture. La spécification de la demande/réponse modèle s'appelle un protocole. Bien connu des protocoles SMB (ou SAMBA) sur Windows ou NFS sur UNIX/LINUX. Pour accéder à un service distant, vous montez le système de fichiers distant sur le niveau du système d'exploitation et le rendre disponible localement comme un disque sur Windows ou en tant que point de montage sur UNIX.
Ensuite, vous pouvez accéder au système de fichier distant à partir de votre programme Java comme n'importe quel système de fichiers local.
Bien sûr, il est également possible d'écrire votre propre fichier de fournisseur de service (avec votre propre couche de protocole) et l'exécuter sur la machine distante. Comme couche de transport pour une telle entreprise sockets (TCP/IP) peuvent être utilisés. Une autre bonne couche de transport serait le protocole http, par exemple avec un service restful ou quelque chose basé sur le protocole WebDav.
OriginalL'auteur mmehl
Pour répondre à votre question - Pas, votre attente n'est pas valide.
De la récupération de fichiers à partir d'un serveur distant est en soi dépendent les services en cours d'exécution sur le serveur. Pour récupérer un fichier à partir d'un serveur distant, le serveur distant doit être attendre que votre requête pour un fichier.
Le cas que vous avez indiquée dans votre question (à l'aide de jsch et sftp, à l'aide d'un expéditeur et le récepteur Java sockets) que vous avez déjà atteint, sont essentiellement les mêmes que ceci:
La seule différence est que Java utilise le système d'exploitation natif de la prise en charge intégrée de la lecture à partir d'un windows style partager. L'ordinateur windows distant dispose d'un service de partage en cours d'exécution sur elle (tout comme Samba sous linux, ou un java socket programme) en attente de votre demande.
De l'API Java docs sur
File
(http://docs.oracle.com/javase/6/docs/api/java/io/File.html)Donc, essentiellement, "Bon vieux Java I/O" est plus ou moins juste un wrapper sur certains protocoles communs.
Pour répondre à la deuxième partie de votre question (ce qui est le mieux que je puisse faire pour lire/écrire des fichiers à distance à l'aide de Java?), cela dépend de ce qu'à distance de système d'accès et, plus important encore, ce services sont en cours d'exécution sur elle.
Dans le cas de votre cible à distance de la machine étant une machine Ubuntu, je dirais que la meilleure solution serait d'utiliser Jsch. Si votre ordinateur cible peut être soit une machine windows ou un linux de la machine, je serais probablement aller pour l'exécution de Java prises de courant sur les deux machines (évidemment personne à charge si vous avez accès à l'installation de votre application sur la machine distante).
Généralement parlant, aller avec le plus bas dénominateur entre les systèmes cibles (en termes de protocoles de partage de fichiers).
OriginalL'auteur Lawrence
Nous avons utilisé sshfs. Vous pouvez ajouter à /etc/fstab la ligne:
sshfs#user@remoteAddress:remoteDir /mnt/ssh fuse defaults 0 0
et puis
mount /mnt/ssh
Si vous avez un fichier
/home/user/remoteDir/dir/file.txt
ouremote
machine, vous pouvez l'installer sur votre machine. Vous pourrez y accéder par:/mnt/ssh/dir/file.txt
à partir de votre ordinateur local (à distance le point de montage est/home/user/remoteDir/
). Pour le test d'installer sshfs et l'appelsshfs user@hostname:remoteDir /mnt/ssh
. À partir du code java exécuté simplenew File("/home/user/remoteDir/dir/file.txt")
Oh ! Donc c'est à peu près similaire à l'accès à un réseau monté en voiture et/ou un dossier partagé. Je vais essayer celui-là, merci !
OriginalL'auteur Andrzej Jozwik
Je pense que le RMI peut être la solution, vous pouvez configurer un serveur un serveur RMI sur l'ordinateur que vous voulez connecter et utiliser votre machine à un client.
Je voudrais donner au client un chemin d'accès au fichier de ce rapport sera envoyé au serveur, le serveur peut alors lire dans le fichier en octets et a renvoyé le dossier devant le client.
Je ne suis pas sûr de sockets, RMI (remote method invocation) est la version java de corba, je pense.
ce n'est pas tant la version Java de Corba, mais peut utiliser Corba sous le capot.
OriginalL'auteur Paul
tout d'abord, vous avez un ping sur l'adresse ip de votre système et le système distant.
puis juste essayé d'écrire le codage pour lire ou d'écrire des fichiers comme à l'intérieur de votre système lui-même.
OriginalL'auteur pandix