2016-12-20 4 views
-2

Ich mag wissen, schreiben, dass, wie kann ich ein Bild mit FileOutputStream als da FileOutputStream schreibe für Byte-Daten wie Bild-, Video- und Audio sonst für Textdaten ist es besser und ausreichend zu verwenden, verwendet wird FileReader und FileWriter so, was ich tun möchte, ist ich eine img.png Datei habe, und ich bin in der Lage, es zu lesenWie ein Bild mit Fileoutputstream

FileInputStream fin=new FileInputStream(new File("C:\\Folder1\\img.png")); 

verwenden und es mit read Methode zu lesen und zu diesem Zeitpunkt ich mag ein elbe Bild mit unterschiedlichen Namen erstellen mit

FileOutputStream fout=new FileOutputStream(new File("C:\\Folder1\\newimg.png")); 

und sie mit fout.write schreiben, aber wenn ich das Bild nicht erstellt, aber nicht in der Lage es und seine Größe ist in Bytes

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package fileinputstreamexample; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
/** 
* 
* @author Love Poet 
*/ 
public class FileInputStreamExample { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) throws FileNotFoundException, IOException { 
     // TODO code application logic here 
     FileOutputStream fout = null; 
     FileInputStream fin=new FileInputStream(new File("C:\\Folder1\\img.png")); 
     int i; 
     while((i=fin.read())!=-1) 
     { 
      fout=new FileOutputStream(new File("C:\\Folder1\\newimg.png")); 
      fout.write(i); 
      fout.flush(); 
     } 
     System.out.println("File readed Succesfully"); 
     System.out.println("File Written Succesfully"); 
     fout.close(); 
     fin.close(); 
    } 

} 
+0

Beitrag den vollständigen Code, in dem Sie das Lesen und Schreiben tun – GurV

+1

hallo its ok ich meinen Fehler gefunden gut danke für deine anstrengung war mein fehler, dass ich das neue bild immer wieder in der schleife erstellt habe :-) meine codierung steigt von tag zu tag sehr gut :-p –

Antwort

1
public class DownloadImage { 
    public static void main(String[] args){ 
     FileOutputStream out = null; 
     FileInputStream in = null; 
     int cursor; 
    try{ 
     in = new FileInputStream(new File("C:\\Users\\ganesh.r\\Desktop\\My Stuff\\dp.jpeg")); 
     out = new FileOutputStream("TestImage.jpeg"); 
     while((cursor = in.read())!=-1){ 
      out.write(cursor); 
     } 
    } 
    finally{ 
     if(in!=null){ 
      in.close(); 
     } 
     if(out!=null){ 
      out.close(); 
     } 
     System.out.println("Read and Write complete"); 
    } 
    } 

} 

this helps

0

Nehmen Sie einfach die Öffnung der Datei außerhalb der Schleife zu sehen.

Statt

while((i=fin.read())!=-1) 
     { 
      fout=new FileOutputStream(new File("C:\\Folder1\\newimg.png")); 
      fout.write(i); 
      fout.flush(); 
     } 

Tun Sie dies

fout=new FileOutputStream(new File("C:\\Folder1\\newimg.png")); 
while((i=fin.read())!=-1) 
     { 
      fout.write(i); 
      # flush inside loop only if the chunks u r reading are HUGE, and u want+accomodate to partial flush. 
     } 
     fout.flush(); 
+0

Nicht innerhalb von schleifen spülen. – EJP

0
try { 
    FileInputStream fin=new FileInputStream(new File("C:\\Folder1\\img.png")); 
    FileOutputStream fout=new FileOutputStream(new File("C:\\Folder1\\newimg.png")); 

     int content; 
     while ((content = fin.read()) != -1) { 
      fout.write(content); 
     } 

     System.out.println("Finished"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
0

Sie die Datei für jedes Byte Eingang neu zu erstellen.

Das folgende ist deutlich effizienter als alle byteweise Lösungen bisher geschrieben:

FileInputStream fin=new FileInputStream(new File("C:\\Folder1\\img.png")); 
FileOutputStream fout=new FileOutputStream(new File("C:\\Folder1\\newimg.png")); 

int count; 
byte[] buffer = new byte[8192]; // or more if you like 
while ((count = fin.read(buffer)) != -1) { 
    fout.write(buffer, 0, count); 
} 
Verwandte Themen