To jest kod, którego próbowałem.
Files.deleteIfExists(Paths.get("NewFile.txt"));
URL smallURL = new URL(url);
Files.copy(smallURL.openStream(), Paths.get("NewFile.txt"));
System.out.println(Files.size(Paths.get("NewFile.txt")));
Działa dobrze, jeśli mam adres URL zawierający mniej niż określoną liczbę znaków, ale kiedy próbuję go użyć z linkiem do adresu URL zawierającego 150 000 znaków, kopiuje on tylko około 65 000 znaków do pliku „NewFile.txt”.
Czy istnieje limit liczby znaków, które możesz nakarmić .openStream? Jak mogę to obejść?
Edycja: przyjrzałem się dokładnie znakom, w których przestaje dodawać do pliku i nie mogłem zauważyć w nich nic wyjątkowego. Wzór w tym miejscu prawie na pewno już wystąpił i nie wystąpił żaden błąd.
2 odpowiedzi
Nie, nie ma takiego ograniczenia w InputStream. (jak sama nazwa wskazuje, jest to interfejs API przesyłania strumieniowego, odczytuje dane w sposób strumieniowy)
URL url = new URL("https://en.wikipedia.org/wiki/Microsoft");
Files.copy(url.openStream(), Paths.get("NewFile.txt"));
System.out.println(Files.size(Paths.get("NewFile.txt")));
To drukuje - 547055
Podejrzewam, że coś może być dziwne z treścią, którą masz w adresie URL, którego używasz, sprawdź to.
Musisz zamknąć InputStream URLConnection:
Files.deleteIfExists(Paths.get("NewFile.txt"));
URL smallURL = new URL(url);
InputStream is = smallURL.openStream();
Files.copy(is, Paths.get("NewFile.txt"));
System.out.println(Files.size(Paths.get("NewFile.txt")));
is.close();
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].