Java'da bir dizeden bellekte bir File nesnesi oluşturun


113

Dosyayı bağımsız değişken olarak kabul eden bir işlevim var. Dize verilerimi işleve iletmek için yeni bir Dosya oluşturmak / yazmak istemiyorum (dosya sistemine yazma erişimim yok). Dize verilerinin bir dosyada bulunmadığını eklemeliyim (bu nedenle verilerimi bir dosyadan okuyamıyorum).

Akışları kullanabilir ve bunları Dosya nesnelerine "aktarabilir miyim"?


2
Bir Filenesneyi alan kodu bağlayabilir / gönderebilir misiniz ? Cevapların da belirttiği gibi, bir Filenesne dosya sistemindeki bir konuma referans gibidir ve bu nedenle gerçek bir dosya olmadan simülasyonu yapmak zordur. Bununla birlikte, işleviniz bir FileReaderveya a aldıysa FileInputStream, dosya olmayan girişi kabul etmek için kodu kolayca değiştirebilirsiniz.
101100

Bellek eşlemeli dosyalar seçiminiz olabilir. Bunlar, Java programının içeriğe doğrudan bellekten erişmesini sağlayan Java'daki özel dosyalardır. Ayrıntılar için lütfen bu bağlantıya gidin: javarevisited.blogspot.com/2012/01/…
Bakteriler

Yanıtlar:


48

Hayır; sınıf örnekleri Filebir dosya sistemindeki bir yolu temsil eder. Bu nedenle, bu işlevi yalnızca bir dosya ile kullanabilirsiniz. Ama belki de InputStreamyerine alan bir aşırı yükleme vardır ?


76

Genellikle bir yöntem bir dosyayı kabul ettiğinde, yakınlarda akışı kabul eden başka bir yöntem vardır. Durum bu değilse, API kötü kodlanmıştır. Aksi takdirde, çoğu durumda genellikle izin verilen geçici dosyaları kullanabilirsiniz. Uygulama ise, yazma izni isteyebilirsiniz .

Bir örnek:

try {
    // Create temp file.
    File temp = File.createTempFile("pattern", ".suffix");

    // Delete temp file when program exits.
    temp.deleteOnExit();

    // Write to temp file
    BufferedWriter out = new BufferedWriter(new FileWriter(temp));
    out.write("aString");
    out.close();
} catch (IOException e) {
}

1
Yazma izni istenemiyor (bu Google AppEngine)
Jon Romero

12

Java'daki bir File nesnesi, dosyanın kendisinin değil, bir dizine veya dosyaya giden yolun temsilidir. Bir Filenesne oluşturmak için dosya sistemine yazma erişiminizin olması gerekmez, yalnızca gerçekten dosyaya yazmak istiyorsanız ihtiyacınız vardır ( örneğin bir FileOutputStream kullanarak )


1
Bir dosyayı harici bir API'ye iletmeniz gerekiyorsa, gerçek bir dosyaya ihtiyacınız vardır - "boş" bir File nesnesi iletmek işe yaramaz.
Andrei Volgin

8

FileSınıf I / O için kullanılmak üzere bir dosyanın, gerçek bir kolu "fikri" temsil eder. Bu nedenle, Filesınıfın .exists()dosyanın var olup olmadığını söyleyen bir yöntemi vardır. (Nasıl sahip olabilirsinFile Var olmayan nesneye ?)

Buna karşılık, bir oluşturmak, new FileInputStream(new File("/my/file"))baytları okuyabileceğiniz gerçek bir akış sağlar.


-1
FileReader r = new FileReader(file);

Bir dosya okuyucu kullanın dosyayı yükleyin ve ardından içeriğini bir dizgi arabelleğine yazın.

misal

Yukarıdaki bağlantı size bunu nasıl başaracağınıza dair bir örnek gösteriyor. Bu cevaba gönderilen diğer bir gönderi, bir dosyayı belleğe yüklemek için söylediği gibi, gerçek dosyada değişiklik yapmayı planlamadığınız sürece yazma erişimine ihtiyacınız yoktur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.