Java/File Input Output/FileOutputStream

Материал из Java эксперт
Перейти к: навигация, поиск

Append output to file using FileOutputStream

   <source lang="java">
  

import java.io.FileOutputStream; public class Main {

 public static void main(String[] args) throws Exception {
   FileOutputStream fos = new FileOutputStream("C:/demo.txt", true);
   fos.write("Appended".getBytes());
   fos.close();
 }

}


 </source>
   
  
 
  



Copy byte between FileInputStream and FileOutputStream

   <source lang="java">
  

import java.io.FileInputStream; import java.io.FileOutputStream; class Copy {

 public static void main(String[] args) throws Exception {
   FileInputStream fis = null;
   FileOutputStream fos = null;
   fis = new FileInputStream(args[0]);
   fos = new FileOutputStream(args[1]);
   int byte_;
   while ((byte_ = fis.read()) != -1)
     fos.write(byte_);
 }

}


 </source>
   
  
 
  



Copy Bytes between FileInputStream and FileOutputStream

   <source lang="java">
  

/*

* Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
*   - Redistributions of source code must retain the above copyright
*     notice, this list of conditions and the following disclaimer.
*
*   - Redistributions in binary form must reproduce the above copyright
*     notice, this list of conditions and the following disclaimer in the
*     documentation and/or other materials provided with the distribution.
*
*   - Neither the name of Sun Microsystems nor the names of its
*     contributors may be used to endorse or promote products derived
*     from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyBytes {

 public static void main(String[] args) throws IOException {
   FileInputStream in = null;
   FileOutputStream out = null;
   try {
     in = new FileInputStream("xanadu.txt");
     out = new FileOutputStream("outagain.txt");
     int c;
     while ((c = in.read()) != -1) {
       out.write(c);
     }
   } finally {
     if (in != null) {
       in.close();
     }
     if (out != null) {
       out.close();
     }
   }
 }

}


 </source>
   
  
 
  



Create DataOutputStream from FileOutputStream

   <source lang="java">
  

import java.io.DataOutputStream; import java.io.FileOutputStream; public class Main {

 public static void main(String[] args) throws Exception {
   FileOutputStream fos = new FileOutputStream("C:/demo.txt");
   DataOutputStream dos = new DataOutputStream(fos);
 }

}


 </source>
   
  
 
  



Create FileOutputStream object from File object

   <source lang="java">
  

import java.io.File; import java.io.FileOutputStream; public class Main {

 public static void main(String[] args) throws Exception {
   File file = new File("C:/demo.txt");
   FileOutputStream fos = new FileOutputStream(file);
 }

}


 </source>
   
  
 
  



Create FileOutputStream object from String file path

   <source lang="java">
  

import java.io.FileOutputStream; public class Main {

 public static void main(String[] args) throws Exception {
   FileOutputStream fos = new FileOutputStream("C:/demo.txt");
 }

}


 </source>
   
  
 
  



File IO

   <source lang="java">
   

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileIOApp {

 public static void main(String args[]) throws IOException {
   FileOutputStream outStream = new FileOutputStream("test.txt");
   String s = "This is a test.";
   for (int i = 0; i < s.length(); ++i)
     outStream.write(s.charAt(i));
   outStream.close();
   FileInputStream inStream = new FileInputStream("test.txt");
   int inBytes = inStream.available();
   System.out.println("inStream has " + inBytes + " available bytes");
   byte inBuf[] = new byte[inBytes];
   int bytesRead = inStream.read(inBuf, 0, inBytes);
   System.out.println(bytesRead + " bytes were read");
   System.out.println("They are: " + new String(inBuf));
   inStream.close();
   File f = new File("test.txt");
   f.delete();
 }

}


 </source>
   
  
 
  



Rollover FileOutputStream

   <source lang="java">

// //Copyright 2006 Mort Bay Consulting Pty. Ltd. //------------------------------------------------------------------------ //Licensed under the Apache License, Version 2.0 (the "License"); //you may not use this file except in compliance with the License. //You may obtain a copy of the License at //http://www.apache.org/licenses/LICENSE-2.0 //Unless required by applicable law or agreed to in writing, software //distributed under the License is distributed on an "AS IS" BASIS, //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. // import java.io.File; import java.io.FileOutputStream; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.StringTokenizer; import java.util.TimeZone; import java.util.Timer; import java.util.TimerTask; /**

* RolloverFileOutputStream
* 
* @author Greg Wilkins
*/

public class RolloverFileOutputStream extends FilterOutputStream {

 private static Timer __rollover;
 final static String YYYY_MM_DD = "yyyy_mm_dd";
 private RollTask _rollTask;
 private SimpleDateFormat _fileBackupFormat = new SimpleDateFormat(System.getProperty(
     "ROLLOVERFILE_BACKUP_FORMAT", "HHmmssSSS"));
 private SimpleDateFormat _fileDateFormat = new SimpleDateFormat(System.getProperty(
     "ROLLOVERFILE_DATE_FORMAT", "yyyy_MM_dd"));
 private String _filename;
 private File _file;
 private boolean _append;
 private int _retainDays;
 /* ------------------------------------------------------------ */
 public RolloverFileOutputStream(String filename) throws IOException {
   this(filename, true, Integer.getInteger("ROLLOVERFILE_RETAIN_DAYS", 31).intValue());
 }
 /* ------------------------------------------------------------ */
 public RolloverFileOutputStream(String filename, boolean append) throws IOException {
   this(filename, append, Integer.getInteger("ROLLOVERFILE_RETAIN_DAYS", 31).intValue());
 }
 /* ------------------------------------------------------------ */
 public RolloverFileOutputStream(String filename, boolean append, int retainDays)
     throws IOException {
   this(filename, append, retainDays, TimeZone.getDefault());
 }
 /* ------------------------------------------------------------ */
 public RolloverFileOutputStream(String filename, boolean append, int retainDays, TimeZone zone)
     throws IOException {
   super(null);
   _fileBackupFormat.setTimeZone(zone);
   _fileDateFormat.setTimeZone(zone);
   if (filename != null) {
     filename = filename.trim();
     if (filename.length() == 0)
       filename = null;
   }
   if (filename == null)
     throw new IllegalArgumentException("Invalid filename");
   _filename = filename;
   _append = append;
   _retainDays = retainDays;
   setFile();
   synchronized (RolloverFileOutputStream.class) {
     if (__rollover == null)
       __rollover = new Timer();
     _rollTask = new RollTask();
     Calendar now = Calendar.getInstance();
     now.setTimeZone(zone);
     GregorianCalendar midnight = new GregorianCalendar(now.get(Calendar.YEAR), now
         .get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH), 23, 0);
     midnight.setTimeZone(zone);
     midnight.add(Calendar.HOUR, 1);
     __rollover.scheduleAtFixedRate(_rollTask, midnight.getTime(), 1000L * 60 * 60 * 24);
   }
 }
 /* ------------------------------------------------------------ */
 public String getFilename() {
   return _filename;
 }
 /* ------------------------------------------------------------ */
 public String getDatedFilename() {
   if (_file == null)
     return null;
   return _file.toString();
 }
 /* ------------------------------------------------------------ */
 public int getRetainDays() {
   return _retainDays;
 }
 /* ------------------------------------------------------------ */
 private synchronized void setFile() throws IOException {
   // Check directory
   File file = new File(_filename);
   _filename = file.getCanonicalPath();
   file = new File(_filename);
   File dir = new File(file.getParent());
   if (!dir.isDirectory() || !dir.canWrite())
     throw new IOException("Cannot write log directory " + dir);
   Date now = new Date();
   // Is this a rollover file?
   String filename = file.getName();
   int i = filename.toLowerCase().indexOf(YYYY_MM_DD);
   if (i >= 0) {
     file = new File(dir, filename.substring(0, i) + _fileDateFormat.format(now)
         + filename.substring(i + YYYY_MM_DD.length()));
   }
   if (file.exists() && !file.canWrite())
     throw new IOException("Cannot write log file " + file);
   // Do we need to change the output stream?
   if (out == null || !file.equals(_file)) {
     // Yep
     _file = file;
     if (!_append && file.exists())
       file.renameTo(new File(file.toString() + "." + _fileBackupFormat.format(now)));
     OutputStream oldOut = out;
     out = new FileOutputStream(file.toString(), _append);
     if (oldOut != null)
       oldOut.close();
     // if(log.isDebugEnabled())log.debug("Opened "+_file);
   }
 }
 /* ------------------------------------------------------------ */
 private void removeOldFiles() {
   if (_retainDays > 0) {
     Calendar retainDate = Calendar.getInstance();
     retainDate.add(Calendar.DATE, -_retainDays);
     int borderYear = retainDate.get(java.util.Calendar.YEAR);
     int borderMonth = retainDate.get(java.util.Calendar.MONTH) + 1;
     int borderDay = retainDate.get(java.util.Calendar.DAY_OF_MONTH);
     File file = new File(_filename);
     File dir = new File(file.getParent());
     String fn = file.getName();
     int s = fn.toLowerCase().indexOf(YYYY_MM_DD);
     if (s < 0)
       return;
     String prefix = fn.substring(0, s);
     String suffix = fn.substring(s + YYYY_MM_DD.length());
     String[] logList = dir.list();
     for (int i = 0; i < logList.length; i++) {
       fn = logList[i];
       if (fn.startsWith(prefix) && fn.indexOf(suffix, prefix.length()) >= 0) {
         try {
           StringTokenizer st = new StringTokenizer(fn.substring(prefix.length(), prefix.length()
               + YYYY_MM_DD.length()), "_.");
           int nYear = Integer.parseInt(st.nextToken());
           int nMonth = Integer.parseInt(st.nextToken());
           int nDay = Integer.parseInt(st.nextToken());
           if (nYear < borderYear || (nYear == borderYear && nMonth < borderMonth)
               || (nYear == borderYear && nMonth == borderMonth && nDay <= borderDay)) {
             // log.info("Log age "+fn);
             new File(dir, fn).delete();
           }
         } catch (Exception e) {
           // if (log.isDebugEnabled())
           e.printStackTrace();
         }
       }
     }
   }
 }
 /* ------------------------------------------------------------ */
 public void write(byte[] buf) throws IOException {
   out.write(buf);
 }
 /* ------------------------------------------------------------ */
 public void write(byte[] buf, int off, int len) throws IOException {
   out.write(buf, off, len);
 }
 /* ------------------------------------------------------------ */
 /** 
  */
 public void close() throws IOException {
   synchronized (RolloverFileOutputStream.class) {
     try {
       super.close();
     } finally {
       out = null;
       _file = null;
     }
     _rollTask.cancel();
   }
 }
 /* ------------------------------------------------------------ */
 /* ------------------------------------------------------------ */
 /* ------------------------------------------------------------ */
 private class RollTask extends TimerTask {
   public void run() {
     try {
       RolloverFileOutputStream.this.setFile();
       RolloverFileOutputStream.this.removeOldFiles();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
 }

}

 </source>
   
  
 
  



Split file

   <source lang="java">
  

import java.io.FileInputStream; import java.io.FileOutputStream; class FileSplitter {

 public static void main(String args[]) throws Exception {
   FileInputStream fis = new FileInputStream(args[0]);
   int size = 1024;
   byte buffer[] = new byte[size];
   int count = 0;
   while (true) {
     int i = fis.read(buffer, 0, size);
     if (i == -1)
       break;
     String filename = args[1] + count;
     FileOutputStream fos = new FileOutputStream(filename);
     fos.write(buffer, 0, i);
     fos.flush();
     fos.close();
     ++count;
   }
 }

}


 </source>
   
  
 
  



Use FileOutputStream to write the bytes to a file.

   <source lang="java">
  

import java.io.FileOutputStream; public class Main {

 public static void main(String[] argv) throws Exception {
   byte[] vals = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 };
   FileOutputStream fout = new FileOutputStream("Test.dat");
   for (int i = 0; i < vals.length; i += 2)
     fout.write(vals[i]);
   fout.close();
 }

}


 </source>
   
  
 
  



Write byte array to a file using FileOutputStream

   <source lang="java">
  

import java.io.FileOutputStream; public class Main {

 public static void main(String[] args) throws Exception {
   String strFilePath = "C://demo.txt";
   FileOutputStream fos = new FileOutputStream(strFilePath);
   String strContent = "Write File using Java FileOutputStream example !";
   fos.write(strContent.getBytes());
   fos.close();
 }

}


 </source>
   
  
 
  



Write data with FileOutputStream

   <source lang="java">
  

import java.io.FileOutputStream; class FileOutputStreamDemo {

 public static void main(String args[]) throws Exception {
   FileOutputStream fos = new FileOutputStream(args[0]);
   // Write 12 bytes to the file
   for (int i = 0; i < 12; i++) {
     fos.write(i);
   }
   // Close file output stream
   fos.close();
 }

}


 </source>
   
  
 
  



Write double to a file using DataOutputStream

   <source lang="java">
  

import java.io.DataOutputStream; import java.io.FileOutputStream; public class Main {

 public static void main(String[] args) throws Exception {
   String strFilePath = "C:/Double.txt";
   FileOutputStream fos = new FileOutputStream(strFilePath);
   DataOutputStream dos = new DataOutputStream(fos);
   double d = 1;
   dos.writeDouble(d);
   dos.close();
 }

}


 </source>
   
  
 
  



Write file using FileOutputStream

   <source lang="java">
  

import java.io.FileOutputStream; public class Main {

 public static void main(String[] args) throws Exception {
   FileOutputStream fos = new FileOutputStream("C:/demo.txt");
   byte b = 01;
   fos.write(b);
   fos.close();
 }

}


 </source>
   
  
 
  



Write UTF String, integer and double with DataOutputStream

   <source lang="java">
  

import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.FileOutputStream; public class Main {

 public static void main(String[] argv) throws Exception {
   FileOutputStream fileOut = new FileOutputStream("data.txt");
   BufferedOutputStream buffer = new BufferedOutputStream(fileOut);
   DataOutputStream dataOut = new DataOutputStream(buffer);
   dataOut.writeUTF("Hello!");
   dataOut.writeInt(4);
   dataOut.writeDouble(100.0);
   dataOut.close();
   buffer.close();
   fileOut.close();
 }

}


 </source>