2010-08-30 34 views
0

Fondamentalement, j'écris une application qui copie/déplace les fichiers du système de fichiers local vers un système de fichiers distant sur un protocole de type FTP.Est-il logique d'utiliser `java.nio.file.spi` pour implémenter l'accès à un système de fichiers distant?

Serait-ce une bonne approche pour encapsuler les bits spécifiques au protocole dans l'interface du fournisseur de services du système de fichiers? Pour autant que je sache, cela ferait fonctionner ma bibliothèque avec d'autres applications utilisant la nouvelle API IO, n'est-ce pas?

Répondre

3

Il semble que vous envisagiez de créer une classe RemoteFileSystemProvider spécifiquement pour votre système de fichiers distant. Cette classe reflétera FileSystemProvider, fournissant des fonctionnalités similaires pour accéder au système de fichiers distant que vous utilisez. Si c'est quelque chose que votre projet ou votre équipe peut utiliser à plusieurs reprises, alors il vaut la peine de refléter l'objet FileSystemProvider lors de la création de votre code. Cela permet à toute personne familière avec le paquet java.nio.file de comprendre facilement comment utiliser le vôtre. Cependant, gardez à l'esprit que FileSystemProvider lui-même n'est conforme à aucune interface ou n'élève aucune classe dans le package. FileSystemProviderFileSystemProviderFileSystemProviderFileSystemProvider C'est un point d'entrée, et votre classe serait aussi un point d'entrée. Toutefois, si vous imitiez la structure de la méthode, vous générez Channel objets à lire et à écrire, ce qui correspond aux spécifications java.nio qui peuvent être réutilisées. Cela permettrait à tout code qui sait travailler avec les canaux de fonctionner avec les canaux générés par votre fournisseur de système de fichiers distant. Ma première étape dans la construction de quelque chose comme ceci, cependant, serait de simplement construire un paquet spécifiquement pour ce système de fichiers à distance. Il prendrait en charge toutes les communications et mettrait en œuvre les fonctions de base telles que getUploadChannel, getDownloadChannel, renameRemoteFile, copyRemoteFile, deleteRemoteFile et toute autre fonctionnalité nécessaire. Cela vous donnera une bonne interface de bon sens définie pour ce système de fichiers spécifique et ses fonctionnalités. Ce paquet pourrait être utilisé dans n'importe quel contexte pour simplement implémenter une connexion à ce système de fichiers. Si vous vous assurez que cet objet utilise des canaux pour télécharger et télécharger des fichiers, il sera prêt à s'intégrer à toute API utilisant java.nio.

Ce n'est qu'après avoir terminé, testé et travaillé, que je considère l'interface que je voudrais imiter ou mettre en œuvre pour la livraison au reste de l'équipe. Cela garantira que les modifications apportées au protocole de système de fichiers distant ou à l'API Java auront un impact minimal sur l'ensemble du système.

1

Je voudrais descendre et sale et utiliser le protocole FTP-like. Le problème avec l'implémentation d'API de bas niveau par rapport aux API de haut niveau est que vous masquer tous les coûts réels et rendre les choses plus faciles, en fait extrêmement dures ou coûteuses. Considérez seek() par exemple.