getResourceAsStream()
yönteminin farkındayım, ancak dosyayı okuyan ayrıştırıcıda bir sorun var, tüm yapı bir FileInputStream()
beklemek için uygulandı ve getResourceAsStream()
, dönüştürülemeyen bir girdi akışı döndürüyor. Bu durum için kolay bir "düzeltme" var mı?FileInputStream ile bir jardedeki txt dosyasına nasıl erişebilirim?
cevap
bir JAR dosyası içinde bulunan bir kaynak, bir dosya değil kendisi olduğunu ve bir FileInputStream
kullanılarak okunamaz. Kesinlikle bir FileInputStream
gerektiren bir kod varsa, getResourceAsStream()
kullanarak verileri ayıklamanız, geçici bir dosyaya kopyalamanız ve sonra bu geçici dosya için kodunuza bir FileInputStream
iletmeniz gerekir. Tabii
gelecekte, InputStream
gibi şeyler somut uygulamalarını beklemek kod yazmak asla, her zaman pişman olacaksın.
sizin ayrıştırma yalnızca FileInputStream çalışır inanıyoruz ama gerçek durum olmasa
inputStream ve o ayrıştırıcı
2 seçenek
kullanım adaptör desen kullanmalıdır yok bir CustomFileInputStream oluşturmak ve daha CustomFileInputStream
- 012 getResourceAsStream veri aktarımı ilgili yöntemleri üzerine yazmak Geçenlerde aynı sorunu yaşamıştır
Daha iyi bir çözüm, InputStream öğesini saran bir FileInputStream yazılır. İşte kullandığımız sınıf,
public class VirtualFileInputStream extends FileInputStream {
private InputStream stream;
public VirtualFileInputStream(InputStream stream) {
super(FileDescriptor.in); // This will never be used
this.stream = stream;
}
public int available() throws IOException {
throw new IllegalStateException("Unimplemented method called");
}
public void close() throws IOException {
stream.close();
}
public boolean equals(Object obj) {
return stream.equals(obj);
}
public FileChannel getChannel() {
throw new IllegalStateException("Unimplemented method called");
}
public int hashCode() {
return stream.hashCode();
}
public void mark(int readlimit) {
stream.mark(readlimit);
}
public boolean markSupported() {
return stream.markSupported();
}
public int read() throws IOException {
return stream.read();
}
public int read(byte[] b, int off, int len) throws IOException {
return stream.read(b, off, len);
}
public int read(byte[] b) throws IOException {
return stream.read(b);
}
public void reset() throws IOException {
stream.reset();
}
public long skip(long n) throws IOException {
return stream.skip(n);
}
public String toString() {
return stream.toString();
}
}
+1 ama ben sahte şeyler ihtiyacını vurgulamak için FakeFileInputStream diyeceğim :) ve somut FileInputStream uygulamasını kullanmamaya teşvik ediyorum. – helios
- 1. Android FileInputStream read() txt dosyası için String
- 2. Cihazda logcat dosyasına nasıl erişebilirim
- 3. Matlab'da bir .txt dosyasına nasıl dizi yazdırılır?
- 4. Android'de bir .txt dosyasına nasıl yazarım?
- 5. .data dosyasından .txt dosyasına nasıl yazılır Java?
- 6. Bir txt dosyasına yazın android java
- 7. Bir klasördeki dosya listesini Linux'ta bir txt dosyasına nasıl gönderirim?
- 8. Tam bir cümle bir .txt dosyasına nasıl girilir C++
- 9. Bir komut dosyası aracılığıyla bir giriş txt dosyası Komut İstemi'nde bir çıkış txt dosyasına nasıl çalıştırılır?
- 10. Java fileinputstream url ile kullanma
- 11. Bir toplu iş dosyasına bir txt satırı satırı okuyun.
- 12. Açıkça kapatılıyor FileInputStream
- 13. Bir webmethod'ta oturuma nasıl erişebilirim?
- 14. yapıcı XSSFWorkbook (FileInputStream)
- 15. FileInputStream ClassPathResource vs bütünlüğü
- 16. VBA'da kayıtsız bir COM bileşenine nasıl erişebilirim?
- 17. FileReader'da Mock FileInputStream, PowerMock
- 18. Bir txt dosyasındaki verilerin üzerine nasıl yazılır?
- 19. kopyalayın, yapıştırın ve yeni satırları kapsayan txt dosyasına eko
- 20. EOF ile yayılan txt sorunu nasıl çözülür?
- 21. vb.net ile .txt dosyasını silin.
- 22. jq read .txt dosyasını okuyun ve değerleri json dosyasına yazın
- 23. Bir JSON dizisine boost :: property_tree ile nasıl erişebilirim?
- 24. Şablon Araç Seti ile bir dizinin öğelerine nasıl erişebilirim?
- 25. Java içinde FileInputStream kullanarak bir görüntü okuyun
- 26. Android'de bir metin dosyasına nasıl eklenir?
- 27. Nodejs ile bir dizinde .txt uzantılı ilk dosya nasıl alınır?
- 28. iOS'ta pusulaya nasıl erişebilirim?
- 29. Python - txt dosyası
- 30. Python JSON yeni satırdaki her değişkeni ile .txt dosyasına ekleme/ekleme
Kullandığımız sınıf, bu nedenle arabirime değil, uygulamanın kodlanmasına iyi bir fikirdir. – Powerlord
Giriş akışlarını uygulamalarına dökmemelisiniz. Boru ve filtreleri uygulamak için düşünülmektedir. Bu, bir (dosya) inputsrteam bir dosyadan okur, başka bir sıkıştırmayı (GZipI.S.S), başka bir kopuk çizgisi (bufferedI.S.), Başka ... vb. Dolayısıyla, programınız bir bayt akışı, bir girdi akışını bekler (herhangi bir I.S.) ve ardından bazı uygulamalarını sağlar. Akışı bir diğeriyle birleştirmek isterseniz: yeni GZipInputStream (yeni FileInputStream (yol)). – helios