J'ai commencé avec l'exigence de lecture et d'écriture de fichiers dans / dans un répertoire sur une machine Ubuntu distante.
Premier, j'ai écrit un programme Java qui pourrait lire, écrire des fichiers d'un dossier partagé sur une machine Windows distante, c'est-à-dire. sur un réseau local. Ici, quelque chose comme ça fonctionne sur ma machine à Windows (locale): p> Maintenant, lorsque je considère une machine ubuntu distante, je ne peux évidemment pas faire quelque chose comme ceci car la machine n'est pas Sur le réseau local ( Je ne suis pas sûr que cela puisse être fait même s'il est sur le réseau local em>!). Par conséquent, j'ai essayé de suivre les approches: p> Tout en faisant tout cela, j'ai eu de nombreuses questions, lisez de nombreux postes, etc. Et je me sentais que je manque quelque chose sur les fondamentaux: p> Pour réitérer, Je souhaite écrire un code à l'aide de Java E / S (SIML ou Nio, les deux sont corrects) qui peuvent simplement lire, écrire des fichiers distants sans utiliser de services sur des protocoles tels que FTP, HTTP, etc. Modèle de récepteur d'expéditeur de socket fort>. Mon attente est valable? P> P.s: Veuillez commenter au cas où je devrais élaborer une question de pose avec précision! p> p>
4 Réponses :
Si vous souhaitez accéder à un système de fichiers sur un ordinateur distant, cet ordinateur doit rendre son système de fichiers disponible avec un service. Un tel service est typiquement un travail d'arrière-plan, qui gère les demandes entrantes et renvoie une réponse, par ex. Pour l'authentification, l'autorisation, la lecture et l'écriture. La spécification du modèle de demande / réponse est appelée protocole. Les protocoles bien connus sont SMB (ou Samba) sur Windows ou NFS sur UNIX / Linux. Pour accéder à un tel service à distance, vous montez le système de fichiers distant sur le niveau du système d'exploitation et la rendre disponible localement en tant que lecteur sous Windows ou comme point de montage sur UNIX. P>
Ensuite, vous pouvez accéder au système de fichiers distant à partir de votre programme Java, comme n'importe quel système de fichiers local. P>
Bien sûr, il est également possible d'écrire votre propre fournisseur de services de fichiers (avec votre propre couche de protocole) et de l'exécuter sur la machine distante. Comme une couche de transport pour des prises de telle Endeavour (TCP / IP) peut être utilisée. Une autre bonne couche de transport serait le protocole HTTP, par ex. avec un service reposant ou quelque chose basé sur webdav. p>
Nous avons utilisé sshfs . Vous pouvez ajouter à / etc / fstab la ligne: p>
puis sshfs # User @ Remoteaddress: RemoteDir / MNT / SSH Fuse Fuse par défaut 0 0 Code> P>
montage / mnt / ssh code> p>
Si vous avez fichier /home/user/remotedir/dir/file.txt code> ou
distant code> machine que vous pouvez monter sur votre machine. Vous y trouverez:
/mnt/ssh/dir/file.txh/dir/file.txt code> à partir de votre machine locale (point de montage à distance est
/ Accueil / utilisateur / RemoteDir / Code>). Pour tester l'installation SSHFS et appelez
SSHFS User @ HostName: RemoteDir / MNT / SSH < / code>. De Java Code Run Simple
Nouveau fichier ("/ home / utilisateur / remotedir / dir / fichier.txt") code>
Oh ! Il est donc à peu près similaire à l'accès d'un lecteur réseau monté et / ou d'un dossier partagé. Je vais essayer celui-ci - merci!
Je pense que RMI pourrait être la solution, vous pouvez configurer un serveur un serveur RMI sur la machine que vous souhaitez connecter et utiliser votre machine un client. P>
Je donnerais au client un chemin d'accès au fichier Ceci sera envoyé au serveur, le serveur pourrait ensuite lire dans le fichier sous forme d'octets et envoyer le fichier au client. P>
Aspectez-vous à l'usage de Socket - Deux programmes en cours d'exécution, un expéditeur, un récepteur? Si oui, je l'ai essayé plus tôt et je n'ai pas l'intention de l'utiliser.
Je ne suis pas sûr des sockets, RMI (Invocation de la méthode à distance) est la version Java de Corba, je pense.
@Paul, ce n'est pas tant la version Java de Corba mais peut utiliser Corba sous le capot.
Pour répondre à votre question - non fort>, votre attente n'est pas valide. récupérer des fichiers à partir d'un serveur distant dépend de manière intrinsèquement dépendant des services exécutés sur ce serveur. Pour récupérer un fichier à partir d'un serveur distant, le serveur distant doit s'attendre à votre demande de fichier. P> Les cas que vous avez énuméré dans votre question (à l'aide de JSCH et SFTP, à l'aide d'un expéditeur et d'un récepteur Java Sockets) que vous avez déjà atteint, sont essentiellement les mêmes que ceci: P> File inputFile = new File(
"\\172.17.89.76\EBook PDF");
Je ne suis pas sûr que cela aidera, mais vous pourriez jeter un coup d'œil à Apache VFS
Java dépend d'un certain niveau sur le système d'exploitation pour faire l'IO - même la bonne vieille vie utilisée - donc un peu pas clair ce que votre question souligne.
@MadProgrammateur Je l'ai vérifié mais je ne pense pas que mes besoins doivent faire quoi que ce soit avec le fichier "type"; En outre, il prend en charge la lecture de fichiers sur FTP, SFTP, HTTPS, etc. que je ne souhaite pas utiliser. Merci et salutations !
@Bhaskar je veux exécuter le code Java sur la machine1 qui crée un objet java.io.file pointant vers un fichier sur la machine2. Certaines possibilités: 1. Machine1 et Machine2 peuvent être Windows-Linux, Windows-Windows, Linux-Linux 2. Peut être sur différents réseaux (pas nécessairement sur LAN).
Je pense que votre meilleure solution de boîte, si vous ne voulez pas télécharger le fichier localement, c'est une sorte de part de réseau, quelque chose comme SMB
Il y a un bon moment, j'ai utilisé RMI pour implémenter des classes de flux à distance permettant une tuyauterie de flux régulière une fois que la machine cible avait créé une poignée / un talon pour le flux distant. Cela nécessite un type de service sur la machine cible. J'ai utilisé cela pour diffuser GB de données de clients WebStart sur un serveur de fichiers central.