Write file with   RandomAccessFile.

I am trying to read one file and writting in same file be using Random access file .
File is properties file having Key = Value Pair . where values are empty
When i try to write in file File Pointer is at end of line .
Instead of writing to same line it is writing to new line and overwriting new line contents .
For eg.
this is content =..
So i want write after "=" sign How do i do this
RandomAccessFile raf = new RandomAccessFile("D:\\ycdfcpcaliterals2translate.properties", "rw");
          long filesize1 = raf.length();
          try {
               long fptr =0;
               String line = null;
               while ( (raf.length()-fptr) >0 ) {
                    line = raf.readLine();
                    fptr = raf.getFilePointer();
                    raf.seek(fptr);
                    if ( line != null){
                          raf.writeBytes("Written"); // Want to write Here at end of line
               raf.close();
          } catch (IOException ioErr) {
               System.err.println(ioErr);
          } Please suggest solution

First, the method RandomAccessFile.readLine() reads a full line including the new-line character. To position the file pointer just before the new line, you should seek one position backwards.
More to the point, writing to a RandomAccessFile is always done in "overwrite mode"; you cannot insert characters. Therefore, to achieve the effect of inserting characters, you need to re-write the whole file from the insertion point and onwards. It's probably easiest to write to a temporary file.

Similar Messages

  • FileAdapter Write file with empty payload always error

    Hi All ,
    I run on 10.1.3.3.1 with patch Patch 7375080 only esb not have bpel.I have to use webservice for verify data.
    and response with set of objects.
    I have 2 important questions about write file with FileAdapter.
    1. I want to not create file if not have error from validate data but
    with this xsl tranform if I uncomment when value of condition is 'N' that will error cause single line payload.
    <xsl:for-each select="/tns:populateYFRIResponseElement/tns:result/tns:wrongLines">
    <!--<xsl:choose>
    <xsl:when test="../tns:isHaveWrongLines = 'Y'">-->
    <imp1:Child-Element>
    <imp1:FrameNo>
    <xsl:value-of select="concat('&quot;',tns:frameNo,'&quot;')"/>
    </imp1:FrameNo>
    <imp1:EngineNo>
    <xsl:value-of select="concat('&quot;',tns:engineNo,'&quot;')"/>
    </imp1:EngineNo>
    </imp1:Child-Element>
    <!-- </xsl:when>
    </xsl:choose>-->
    </xsl:for-each>
    but if I comment if condition 'Y' FileAdapter create csv files with empty like "","" .
    2.
    I must write log file with FileAdapter . I want to append file so I add attribute Append=true
    to wsdl
    <jca:operation
    LogicalDirectory="outgoingfile"
    InteractionSpec="oracle.tip.adapter.file.outbound.FileInteractionSpec"
    FileNamingConvention="YFRI%yyMMdd%.log"
    NumberMessages="1"
    Append = "true"
    >
    but when run that throws errors cause properties append not found.
    I view class FileInteractionSpec that have append properties .I very confuse.
    Any help would be appreciated.
    Regards,
    Weerawat

    Hi
    Thank for good answer.I am newbies in esb so I don't know that have routing expression before.
    I'm so glad your answer very helpful before routing but same question 1 if I have detail must not write data like below
    ,import file name YFRI20090616165654.DAT at Tue Jun 16 16:59:26 GMT+07:00 2009 with number of data is 2 correct line is 2
    "D",0,0,
    ,import file name YFRI20090616170202.DAT at Tue Jun 16 17:04:40 GMT+07:00 2009 with number of data is 12 correct line is 12
    "D",0,0,
    YFRI.txt,import file name YFRI.txt at Tue Jun 16 19:53:48 GMT+07:00 2009 with number of data is 2 error line is 2
    "D",1,3,MTOCCode:ZE8839LZ SAA is not have in DB
    "D",2,3,MTOCCode:ZE8839LZ SAA is not have in DB
    with
    <xsd:element name="LogFile">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="FileName" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="&quot;">
    </xsd:element>
    <xsd:element name="Desc" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy="&quot;">
    </xsd:element>
    <xsd:element name="Detail" nxsd:startsWith="&quot;D&quot;," maxOccurs="unbounded">
    <xsd:complexType>
    <xsd:sequence nxsd:style="array" nxsd:arrayTerminatedBy="${eol}">
    <xsd:element name="line" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="&quot;"/>
    <xsd:element name="column" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="&quot;"/>
    <xsd:element name="desc" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy="&quot;"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    ESB will display error payload If import not have verify error detail so I have to write 'D',0,0 (Detail,Line,Column).
    In this situation how am I to do ?
    In question 2 .Now I can append with
    <jca:operation
    LogicalDirectory="outgoingfile"
    InteractionSpec="oracle.tip.adapter.file.outbound.FileInteractionSpec"
    FileNamingConvention="YFRI%yyMMdd%.log"
    NumberMessages="1"
    OpaqueSchema="false"
    Append="true"
    >
    </jca:operation>
    Thank you
    Weerawat

  • Error Log entry Unable to write file with XML Saver

    Hi all,
    I have just encountered the following problem. I am saving a XML file using the XML Saver. Another BLT reads the file, changes something, and saves it again with the same name.
    The file is saved, but the NetWeaver SAP Log gives the error
    "Unable to write file /usr/sap/<SID>/JC00/j2ee/cluster/server0/apps/sap.com/xappsxmiiear/servlet_jsp/XMII/root/CM/<folder>/file.xml"
    Is it a problem with the new storage mechanism in MII 12? Even if I delete the file first and then save it again with the same name, the error is displayed (though the file is saved).
    Michael

    Hi Mike,
    no, the Debug only says "Begin Action XML Saver" and "End Action XML Saver".
    The action however writes the file, the contents has changed after the BLT has run.
    Well, I have just tried the Text Saver with the same file (name and contents). It also gives the error. I now wanted to delete the folder. The folder disappered from the workbench view, and the Netweaver log says "Unable to process service message".
    I then clicked "publish" on the parent folder and tried to create the folder again, but although the folder was not displayed, the workbench said "the folder already exists". When I start my BLT, it could write the file into the folder which then reappeared in the workbench.
    Hm, maybe our installation has some problems? Feels like missing authorizations...
    Michael

  • Write file with signed applet

    Hi!
    I have a signed applet which has to write a file to the server, but i still get permission exceptions. I guess I still have to add permissions to the applet but I realy can't find how to do that. Can anyone give me a short tutorial on how to add permissions to the applet?
    greetings

    As stated, applets are only able to write files in the machine that the applet is running on. They can't write files to other machines. They can communicate to the machine that they originate from (its host) - but not other, random machines.
    To place a file on its host, the applet sends the file contents to its host (typically using sockets for this) which receives the data with a server program. Then another program on the host writes the data to a file. If you want the file on another, random machine then it can be transferred using the same approach (sockets, etc.)
    There are alternatives, but this is the least complicated approach. This tutorial walks you through creating an applet and the host it communicates with.
    [http://java.sun.com/docs/books/tutorial/deployment/applet/server.html]
    Note that the tutorial also has a link to a more detailed tutorial, the Custom Networking Trail.

  • File adapter(write files with same extension as we read them)

    Hello
    I am trying to read file as an attachment using file adapter (it can be of any extension .pdf,.txt,.xml)
    I want to write this file using file adapter with the same extension i.e. whatever is read as it is....I am least bothered for reading the content inside the file so am reading it as an attachment..
    Please if anyone knows the answer..reply....

    I ran into a similar issue. As a workaround we ended up just using java to write the files out. When the File Adapter attempts to write out a file it first writes that file to a temp file and then copies that to the appropriate directory.
    I believe that when two or more threads were attempting to write at the same time the write was failing for one (but appearing to work in the console logs). I think a race condition may be created when two threads attempt to write using the File Adapter for access to the temp file. I contacted my oracle rep about it but they are always pretty worthless so I havent ever heard anything back concerning the issue.

  • Help with Read/Write File

    hi I was wondering if someone can help me do some read/write file with java. here is what I want to do:
    Read a file and search the whole file for a word such as "throw" and print out the rest of that line to a new file. in the case of "throw", i want to link all thrown exceptions to the file that contained them.
    can someone help me out and let me know what way I can approach in this?
    any help would be greatly appreciated.
    thanks!

    Rough and dirty, here's a class that will read a file and return a resultset:
    import java.io.*;
    import java.nio.*;
    import java.nio.channels.FileChannel;
    import java.util.*;
    import java.text.DateFormat;
    public class Utils{
         File fileName;
         FileOutputStream outputFile;
         boolean closeChannel;
         //Constructor
         public Utils(String directory, String filename){
              String strFileDir = directory;
              String strFileName = filename;          
              File fileDir = new File(strFileDir);
              fileName = new File(fileDir, strFileName);
              // If directory does not exhist, create it.
              if(!fileDir.isDirectory()){
                   if(fileDir.mkdirs()){
                        System.out.println(fileDir + " created.");
                   else{
                        System.out.println(fileDir + " could not be created.");                    
    public ArrayList readText() throws IOException{          
              // Read content of file into a collection
              ArrayList arrayList = new ArrayList();
              try{
                   BufferedReader in = new BufferedReader(new FileReader(fileName));
                   String line;
                   while((line = in.readLine()) != null){
                        arrayList.add(line);
                   in.close();               
              catch (IOException ex){
                   throw ex;
              return arrayList;          
         }And here's how you use the class:
    // Create a new Disk Utilities object.  This can be used for all subsequent read/writes to this file.
              Utils utilTest = new Utils("e:/testing", "Testing.txt");
    // Create a collection to hold the data from the file.
              ArrayList arrayList = new ArrayList();
              try{arrayList = utilTest.readText();}catch(IOException ex){ex.printStackTrace(System.err);}

  • File Adapter creates file with old record.

    Hi,
    I am working on Oracle Soa suite and trying to find out the the ways to Write file with the help of File Adaptor. But I find a problem with the file Adaptor that whenever I try to write updated rows to the file, it provides the earlier values in the rows and the new values are not written to the file.
    Regards
    Udit

    Hi Anton,
    As Sudhir mentioned, there could be a problem of correct data. The best solution is :
    Inside your RFC code just validate the code for empty values. e.g
    IF NOT ITAB_RFC[] IS INITIAL.
    **ITAB_RFC internal table data.
    ENDIF.
    and after validating this, if still you are getting some file with "0" length, then check File Content Conv in your CC.
    Regards,
    Sarvesh

  • Reading & Writing files with same extension(like ".sas", ".txt" , ".csv",and ".log" in Adobe AIR

    Hi Folks,
    How to read & write files with same extension(like ".sas", ".txt" , ".csv",and ".log" in Adobe AIR.
    Please let me tell if anybody knows asap.
    Thanks & Regards,
    Anderson

    Thanks Jon,
    But, I know how to read the file if we give exact file path
    I need to get the path  and  read file(s) with same extension files in the same folder using adobe air, not single file.
    Don't have file path even, i have folder path,  in that somany files are there. So i need to get which are the same extension(Ex: ".txt", ".sas") files
    If you have any idea , please help me out
    Regards,
    Vijay.

  • How can I write new objects to the existing file with already written objec

    Hi,
    I've got a problem in my app.
    Namely, my app stores data as objects written to the files. Everything is OK, when I write some data (objects of a class defined by me) to the file (by using writeObject method from ObjectOutputStream) and then I'm reading it sequencially by the corresponding readObject method (from ObjectInputStream).
    Problems start when I add new objects to the already existing file (to the end of this file). Then, when I'm trying to read newly written data, I get an exception:
    java.io.StreamCorruptedException
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    Is there any method to avoid corrupting the stream? Maybe it is a silly problem, but I really can't cope with it! How can I write new objects to the existing file with already written objects?
    If anyone of you know something about this issue, please help!
    Jai

    Here is a piece of sample codes. You can save the bytes read from the object by invoking save(byte[] b), and load the last inserted object by invoking load.
    * Created on 2004-12-23
    package com.cpic.msgbus.monitor.util.cachequeue;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    * @author elgs This is a very high performance implemention of Cache.
    public class StackCache implements Cache
        protected long             seed    = 0;
        protected RandomAccessFile raf;
        protected int              count;
        protected String           cacheDeviceName;
        protected Adapter          adapter;
        protected long             pointer = 0;
        protected File             f;
        public StackCache(String name) throws IOException
            cacheDeviceName = name;
            f = new File(Const.cacheHome + name);
            raf = new RandomAccessFile(f, "rw");
            if (raf.length() == 0)
                raf.writeLong(0L);
         * Whne the cache file is getting large in size and may there be fragments,
         * we should do a shrink.
        public synchronized void shrink() throws IOException
            int BUF = 8192;
            long pointer = getPointer();
            long size = pointer + 4;
            File temp = new File(Const.cacheHome + getCacheDeviceName() + ".shrink");
            FileInputStream in = new FileInputStream(f);
            FileOutputStream out = new FileOutputStream(temp);
            byte[] buf = new byte[BUF];
            long runs = size / BUF;
            int mode = (int) size % BUF;
            for (long l = 0; l < runs; ++l)
                in.read(buf);
                out.write(buf);
            in.read(buf, 0, mode);
            out.write(buf, 0, mode);
            out.flush();
            out.close();
            in.close();
            raf.close();
            f.delete();
            temp.renameTo(f);
            raf = new RandomAccessFile(f, "rw");
        private synchronized long getPointer() throws IOException
            long l = raf.getFilePointer();
            raf.seek(0);
            long pointer = raf.readLong();
            raf.seek(l);
            return pointer < 8 ? 4 : pointer;
         * (non-Javadoc)
         * @see com.cpic.msgbus.monitor.util.cachequeue.Cache#load()
        public synchronized byte[] load() throws IOException
            pointer = getPointer();
            if (pointer < 8)
                return null;
            raf.seek(pointer);
            int length = raf.readInt();
            pointer = pointer - length - 4;
            raf.seek(0);
            raf.writeLong(pointer);
            byte[] b = new byte[length];
            raf.seek(pointer + 4);
            raf.read(b);
            --count;
            return b;
         * (non-Javadoc)
         * @see com.cpic.msgbus.monitor.util.cachequeue.Cache#save(byte[])
        public synchronized void save(byte[] b) throws IOException
            pointer = getPointer();
            int length = b.length;
            pointer += 4;
            raf.seek(pointer);
            raf.write(b);
            raf.writeInt(length);
            pointer = raf.getFilePointer() - 4;
            raf.seek(0);
            raf.writeLong(pointer);
            ++count;
         * (non-Javadoc)
         * @see com.cpic.msgbus.monitor.util.cachequeue.Cache#getCachedObjectsCount()
        public synchronized int getCachedObjectsCount()
            return count;
         * (non-Javadoc)
         * @see com.cpic.msgbus.monitor.util.cachequeue.Cache#getCacheDeviceName()
        public String getCacheDeviceName()
            return cacheDeviceName;
    }

  • Fstream can't read or write files 4GB even with -m64?

    Using C++-style streams, I have been unable to read or write files >4GB. For example, when writing 5GB in one go, I get only 1GB. The header for write uses the type streamsize for the size parameter, and according to sizeof, streamsize is 8 bytes (when using -m64). Looking at the assembly for a simple testcase, I verified that size parameter was not truncated before calling the write function.
    What makes this interesting is that I can read or write large files if I do it in the C-style (fopen, fwrite, fclose) or if I use the C++ functions and manually do it in 1GB blocks. I tried the instructions for LFS, but they didn't work and it seems like it shouldn't since this is C++ and I am building a 64-bit app. I have observed this with solaris studio 12.3 and 12.4.
    Is this a bug or am I missing a compiler flag?
    A simple testcase to expose this:
    #include <iostream>
    #include <fstream>
    #include <stdio.h>
    using namespace std;
    int main() {
      streamsize goal_size = ((int64_t) 1<<32) + ((int64_t) 1<<30);
      cout << goal_size << endl;
      char* data = new char[goal_size];
      fill(data,data+goal_size,'c');
      FILE* f = fopen("classic.data","w");
      fwrite(data,1,goal_size,f);
      fclose(f);
      fstream file("stream.data", std::ios::out | std::ios::binary);
      file.write(data,goal_size);
      file.close();

    Eh... sorry, didnt read the source close enough
    I can reproduce your misbehavior when compiling "by default" (with default -library=Cstd).
    It fails somewhat differently with Apache STL (-library=stdcxx4), which is kinda the modern version of Cstd.
    It works fine when compiling with -library=stlport4, or -library=stdcpp (-std=c++11).
    Looks like it is a deficiency of those particular STLs.
    regards,
      Fedor.

  • I write digital port by 'DAQmx Configure Logging.vi​' and receive TDMS file with 8 boolean channels. How can I write to 1 integer channel?

    Hello!
    I want to write 1 digital port from PXI-6536 with streaming to TDMS file.
    I'm writing by 'DAQmx Configure Logging.vi' and become TDMS file with 8 boolean channels.
    How can I write to 1integer channel?
    Attachments:
    1.JPG ‏27 KB

    Hey Atrina,
    The actual data stored on disk is just the raw data (that is, a byte per sample in your case).  It's really just a matter of how that data is being represented in LabVIEW whenever you read back the TDMS file.
    I'm not sure if there is a better way to do this, but here is a way to accomplish what you're wanting:
    Read back the TDMS file as a digital waveform.  Then there's a conversion function in LabVIEW called DWDT Digital to Binary.  This function will convert that set of digital channels into the "port format" that you're wanting.  I've attached an example of what I mean.
    Note: When looking at this VI, there are a few things that the downgrade process did to the VI that I would not recommend for these TDMS files.  It added a 1.0 constant on the TDMS Open function, and it set "disable buffering" on the TDMS Open function to false; you can get rid of both of those constants.
    Message Edited by AndrewMc on 01-27-2010 11:21 AM
    Thanks,
    Andy McRorie
    NI R&D
    Attachments:
    digitalconvert.vi ‏13 KB

  • How can i format my external hard drive to write files from Mac without loosing the files that i alredy have on my external hard when i used it with windows?

    How can i format my external hard drive to write files from Mac without loosing the files that i alredy have on my external hard when i used it with windows?
    I have been using Windows to write files to my 1TB WD external hard drive and I do not want to format to loose the files capacity of around 500GB
    Someone, Please help

    Hi Allen,
    Is there any way to store the back up to Mac and restore after formating?

  • How to write to a file with \n (new line)???

    Hi there,
    I have the following method that reads a file's content and convert it into a string:
         public static String getFileContent(String fileName) throws IOException
              File file = new File(fileName);
              FileInputStream fileInputStream = new FileInputStream(file);
              BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
              StringBuffer stringBuffer = new StringBuffer();
              String line;
              while ( (line=bufferedReader.readLine()) != null )
                   stringBuffer.append(line+"\n");
              return stringBuffer.toString();
         }I'm trying to write a method that writes a String to a file WITH THE NEW LINE. All classes I used (DataOutputStream, FileWriter, PrintStream...) do not force a new line (I get everything in one line)
    I thought maybe I should change the "\n" in the line
    stringBuffer.append(line+"\n"); but...didn't know what.
    thanks for any advise

    BufferedReader readLine remove the newline sequence. But you're putting \n back which should do what you appear to want.
    However newline sequence isn't always just \n, on unix systems it's \n, on windows its \r\n (reads "carriage-return, linefeed"). Sytem.getProperty("line.separator"); will get you the appropriate end of line string.

  • Write data to .txt file with formatting

    Hi,
    I am trying to read data from serial port and write it on to a .txt file. I am able to write onto the file but it has got no formatting. What I would ideally like to do is, read the data from serial port, take only some parts of it and write on to the text file with proper formatting. Also, I would like to use the same file to append data each time. I am also having issues setting the pointer to EOF. I would like to append to end of file.
    This is my sample data
    18:33:23 02/10/10 28.32             0 LAC     0.378 mg/dL    0000\
    18:33:23 02/10/10 28.32             0 GLU       102 mg/dL    0000
    that is being read from the serial port. From this I would like to take only columns 1,2,3,5,6 and write onto the .txt file.
    Can someone provide some pointers? I'm using Labview 6.1
    Thanks,
    Sukanya

    If you know what "charecters" you don't want it is pretty easy. A little more difficult when they are unwanted only in certain places in the string. There is a remove whitespace function in the string functions palette. There is also a search and replace function in the "additional string functions" subpalette, that can be set up to find all instances of a char and replace it with something else, an empty string if you want to just delete it/them from your string.
    Putnam
    Certified LabVIEW Developer
    Senior Test Engineer
    Currently using LV 6.1-LabVIEW 2012, RT8.5
    LabVIEW Champion

  • Read a text file then write it with the same name

    Hello
    I have to read a file (.cvs file) then change a value of a field in it and save it again. Therefore, the read file and the write file is the same name. I use CVSParse for doing this
    Here is my code:
    private void updateClassName(String className, String fileName) throws IOException{
              String[][] values=new String[0][0];
              FileReader fileReader = new FileReader(fileName);
         BufferedReader in = new BufferedReader(fileReader);
              values = CSVParser.parse(in);
              List lines = new ArrayList();
              for (int i=0; i<values.length; i++){
                   values[2]= className;
                   lines.add(values[i]);
              try{
                   CSVPrinter cp=new CSVPrinter(new FileOutputStream(fileName));
                   Iterator i=lines.iterator();
                   while (i.hasNext()){
                             String[] line=(String[]) i.next();
         cp.writeln(line);
         cp.close();
         catch (IOException e)
         logger.error(e.getStackTrace());
         logger.info("ERRORS: CANNOT WRITE INTO FILE");
    It it OK when the read file and the write name is the same?
    It is OK with the code above?
    Many thanks
    sho

    Sorry
    I post the code again:
    <code>
    private void updateClassName(String className, String fileName) throws IOException{
    String[][] values=new String[0][0];
    FileReader fileReader = new FileReader(fileName);
    BufferedReader in = new BufferedReader(fileReader);
    values = CSVParser.parse(in);
    List lines = new ArrayList();
    for (int i=0; i<values.length; i++){
    values[2]= className;
    lines.add(values);
    try{
    CSVPrinter cp=new CSVPrinter(new FileOutputStream(fileName));
    Iterator i=lines.iterator();
    while (i.hasNext()){
    String[] line=(String[]) i.next();
    cp.writeln(line);
    cp.close();
    catch (IOException e){
    </code>
    I have indent but it does not display correctly. I donot know why
    Thank you, jverd, for very good strategy. That is what I need

Maybe you are looking for

  • Can't install Sharepoint Foundation 2013 on Windows Server 2012 Std

    Hello, I can't install this product on this server, I'm stuck in the installation of the software prerequisite. Apparently, it can't install IIS... Here is my log file : 2012-12-07 13:01:23 - Processor architecture is (9) 2012-12-07 13:01:23 - Readin

  • Delivery address in a PR

    Hi all,   When I am trying to do external procurement( subcontracting)for  a third party from a service order , the third party ( MT) PR which is getting generated is having the delivery address as the address of the plant and not the customer.I am n

  • Created By User added to Assigned To User when Assigned To User is empty

    I have a requirement to build a runbook activity that will assign the Assigned To User to match the Created By User when the Assigned To User field is empty. However, I am having difficulty pulling both the Assigned To User and the Created By User an

  • Errors in flat file records? how can i handle them?

    Hi All, I am new for BDC. I am uploading customer(XD01) records using BDC caltransaction method.my problem is when i am running the program, some times my program is not updating the records because of my flat file errors. after i correcting the erro

  • Loaded Solstice AdminSuite and now pcplusmp error!

    Wow, I've been running my Solaris 8 (fully patched) on a Compaq Proliant twin Xeon system for a couple of months now. I've been working it, tweaking it, getting it ready for prime time to take over as primary web server for a 2000 box. Today I instal