Je suis à la recherche d'un moyen efficace de créer un fichier dont la taille est inconnue, mais peut varier de mb de chez Go et de remplir son contenu au hasard. Je peux écrire les 200 premiers octets que de sauter à la fin et écrire les 200 derniers octets et de passer au milieu et écrire là. Est-ce que RandomAccessFile
est efficace pour ce faire ou existe-t-il des alternatives mieux adaptées à ce genre de travail?Java accès au grand fichier
Répondre
Oui, utiliser RandomAccessFile
- c'est ce qu'il est là pour ça. Vous pouvez utiliser potentiellement un FileChannel
, mais j'irais pour RandomAccessFile
d'abord - il est susceptible d'être plus simple.
Notez que vous ne serez pas en mesure de « insérer au milieu » du fichier après avoir écrit la partie terminale: Je ne sais pas tout système de fichiers qui soutient que. Vous aurez besoin de connaître la taille complète avant d'écrire la dernière section, fondamentalement. Une alternative serait d'écrire séquentiellement, en se souvenant du dernier morceau jusqu'à la fin.
Si vous pouvez nous donner plus d'informations sur ce que vous devez faire (et quand vous avez des informations sur la taille) nous pouvons être en mesure de vous aider plus.
EDIT: Pour créer le fichier avec une taille spécifique, vous pouvez seek()
passé la fin et écrire des données:
import java.io.*;
public class Test
{
// Just for the sake of a simple test program!
public static void main(String[] args) throws Exception
{
RandomAccessFile file = new RandomAccessFile("file.dat", "rw");
file.seek(100);
file.write(0);
file.close();
}
}
Après cela, a quitté, file.dat
sera 101 octets. (Notez que normalement vous utiliseriez try/finally, etc.)
EDIT: Comme coobird mentionné dans les commentaires, setLength()
étendra également le fichier - mais il tronquera également le fichier si vous lui donnez une longueur inférieure au courant Taille. Compte tenu de votre commentaire à propos de l'écriture de données torrent fondamentalement, je soupçonne que la recherche et l'écriture est exactement le comportement que vous voulez. Lorsque vous recevez un morceau, cherchez juste au bon endroit, écrivez-le, et le fichier s'étendra lui-même quand il le faut.
Je suppose que RandomAccessFile est très bien pour ce problème
RandomAccessFile devrait le faire
- 1. Accès aléatoire au fichier gzip en plusieurs parties (en Java)
- 2. accès au fichier à load_pub_key
- 3. java ajouter au fichier
- 4. Accès au fichier inter-domaine Simple_XML désactivé
- 5. Accès au fichier refusé dans .NET
- 6. Supprimer une ligne du grand fichier txt dans Java
- 7. Ecrire un grand fichier
- 8. Tableau Java: accès direct au composant dans le tableau
- 9. Accès Requête au fichier txt sans les noms de colonne.
- 10. accès au fichier Problème de thread différent dans Asp.net
- 11. Accès au fichier refusé, erreur d'application de la console C#
- 12. Accès au fichier conf JBoss à partir de Flex
- 13. accès au modèle à partir du fichier layout dans CakePHP
- 14. Accès au serveur SharePoint distant
- 15. MFC équivalent au fichier Java # isDirectory()
- 16. Grand fichier Excel issu du tri SSRS
- 17. Accès WebBrowser au contenu binaire
- 18. Accès au tableau d'interopérabilité MC++
- 19. ASP.NET + Accès au chemin refusé
- 20. Accès au DOM de la table JavaScript dans un servlet Java
- 21. Comment automatiser la compilation d'un grand projet Java?
- 22. Accès au service Web depuis Silverlight
- 23. Accès swf local au site Web distant
- 24. façon élégante de tenir un grand dictionnaire typesafe statique java - ou d'éviter le code trop grand
- 25. Accès au service d'impression Webservice refusé
- 26. accès au script via les autorisations
- 27. Java RMI Tutorial - AccessControlException: accès refusé (java.io.FilePermission
- 28. Comment analyser un grand fichier HTML avec la bibliothèque Java HTMLParser
- 29. Donner un accès webservice au service Windows
- 30. Accès au contrôle html côté serveur
Est-il possible de créer un fichier avec une taille préfixée autre que itérer et écrire tout de zéro ou son pour le remplir? –
Modification pour refléter cela. –
Merci, la raison pour laquelle je dois écrire des parties aléatoires dans le fichier, est que j'implémente un client torrent et les pièces arriveront pour des emplacements aléatoires dans le fichier, mais je sais à l'avance quelle sera la taille du fichier. –