JSR75 - openOutputStream() and write() truncates the file

Hi all

I'm developing my first BlackBerry app, targeting the device 8800 (emulator 4.2).

The Javadoc for the API for FileConnection.openOutputStream (long byteOffset): 'the data written to the stream of output returned to that position overwrites all existing data until EOF is reached, and then the additional data are added.

Which is fine, but if the expressions of folklore is not reached, I expect the contents of the file to keep.

When writing on a SD card, this is the case, but when writing to the device database I see all the remaining data truncated from the file.  Here's an example application to demonstrate:

import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import net.rim.device.api.system.Application;

public class JSR75Test extends Application
{
    private JSR75Test() throws Exception
    {
        super();

        String text1 = "This is 30 bytes worth of text";
        String text2 = "Overwrite";

        // File on SD card - works as expected
        // FileConnection fc = (FileConnection)Connector.open("file:///SDCard/BlackBerry/test.txt");

        // File on device store - does not work
        FileConnection fc = (FileConnection)Connector.open("file:///store/home/user/test.txt");
        if (!fc.exists())
            fc.create();
        fc.truncate(0);

        OutputStream out = fc.openOutputStream();
        out.write(text1.getBytes());
        out.close();
        System.out.println("Wrote 30 bytes of data, and file size is " + fc.fileSize());

        OutputStream out2 = fc.openOutputStream(0); // Re-open file at byte 0
        out2.write(text2.getBytes()); // This should overwrite 9 bytes only
        out2.close();

        // Device store prints "but is 9"
        // SD card prints "but is 30"
        System.out.println("Overwrote 9 bytes from position 0, file size should still be 30, but is " + fc.fileSize());

        fc.close();
        System.exit(0);
    }

    public static void main(String[] args) throws Exception
    {
        new JSR75Test();
    }
}

Is this a known bug in the API (and is there a workaround?), or did I miss something?

Thank you very much...

I don't know if this bug is known, but it is certainly a bug and I can reproduce it in my 4.2 Simulator. AFAICS the bug lies in the manipulation of fc.openOutputStream (0). In this case file will be treated as newly created content and old is whipped off by the first flush. On the other hand, this means that it is an ugly workaround: don't use the first byte of your files and openOutputStream (1).

Tags: BlackBerry Developers

Similar Questions

  • Change .txt and write to the file system

    Hello!

    I created composite simple soa with BPEL process that read the .txt file and write to the file system.

    txt file have this structure:

    < ns1:Record - 1 >

    < ns1:Field - > 123 ABC < / ns1:Field - Somename>

    < / ns1:Record - 1 >

    < ns1:Record - 1 >

    < ns1:Field - unnom > 34 < / ns1:Field - Somename>

    < / ns1:Record - 1 >

    . . .

    < ns1:Record - n >

    < ns1:Field - unnom > 432 < / ns1:Field - Somename>

    < / ns1:Record - n >


    For example the input file are < ns1:Record - 1 > appears twice and < ns1:Record - 2 > appears three times in the file.

    In the output file, I want that < ns1:Record - 1 > occurs three times and < ns1:Record - 2 > occurs four times - more initial registration amount 1

    How is it possible to do? Thank you.

    Hello

    Good to know that your problem is solved.

    Your solution to the problem (copy methods and insertAfter bpel) seems to be very well and works as planned including the edge cases. Rather than use the counters, you could use the "count" in clause () method in .

    (Ex: $Invoke1_Write_InputVariable.body / ns3:Record - 1 [count($InputVariable.body/ns3:Record-1)])

    The snippet of Java code that you plan to use works very well when the records are sorted (ascending). You could do the same thing in bpel code too, but I prefer to implement the same using the method described above.

    Hope that my updates have been useful for you.

    See you soon.

  • Strain gauge: calibrate, relaxation and to write to the file

    Hello

    I'm new to labVIEW please bare with me.  My title says I'm trying to do.  I want to capture data from strain gauge using a trigger and write data to a file.  However, I also want to be able to calibrate the strain gauges.

    My attached program reads the data correctly with relaxation and stores it in a file, but it does not calibrate properly.  If I run the program several times and press the button "calibrate" each time, finally get gauges calibrated after two or three iterations.

    Is it possible to change the program so that the gauges are calibrated and then data can be triggered and written to the file?

    I'm using LabVIEW 8.6 and NI-DAQmx 8.8.

    A screenshot of the front panel is also attached.

    So I thought about it, but I'm not completely sure why it works.  I didn't remove the loop condition around the calibration block and the program works beautifully.  All I have to do is wait about 20 seconds before I hit the trigger for the calibration to be completed, and my gauges will be calibrated when I pull the trigger.

    This program works very well for this application.  However, it is difficult to change because all parameters are constant in the block diagram.

  • Is possible to write the INSERT statement that fills two columns: 'word' and 'sense' of the file text with multiple lines - in each line is followed word that is the meaning?

    Is possible to write the INSERT statement that fills two columns: 'word' and 'sense' of the file text with multiple lines - in each line is followed word that is the meaning?

    Hello

    2796614 wrote:

    Is possible to write the INSERT statement that fills two columns: 'word' and 'sense' of the file text with multiple lines - in each line is followed word that is the meaning?

    Of course, it is possible.  According to what the text file looks like to, you can create an external table that treats the text file as if it were a table.  Otherwise, you can always read the file in PL/SQL, using the utl_file package and INSERT of PL/SQL commands.

    You have problems whatever you wantt?  If so, your zip code and explain what the problem is.

    Whenever you have any questions, please post a small example of data (CREATE TABLE and only relevant columns, INSERT statements) for all of the tables involved and the exact results you want from these data, so that people who want to help you can recreate the problem and test their ideas.  In this case, also post a small sample of the text involved file.

    If you ask about a DML operation, such as INSERT, then INSERT statements, you post should show what looks like the tables before the DML, and the results will be the content of the table changed after the DML.

    Explain, using specific examples, how you get these results from these data.

    Always say what version of Oracle you are using (for example, 11.2.0.2.0).

    See the FAQ forum: Re: 2. How can I ask a question on the forums?

  • How to get all the style of paragraphs and their policies of an indesign file and write all the info with info para in a txt file with scripts

    @

    How to get everyone how to get all the style of paragraphs and their policies of an indesign file and write all the info with info para in a txt file with scriptingstyle and their policies of an indesign file and write all the info with info para in a txt file with scripts

    Hello

    Try this,

    var doc = app.activeDocument,
        pstyles = doc.allParagraphStyles,
        report = "";
    for(var i =0;i
    

    Kind regards

    Cognet

  • Read a record of file and write to the database.

    Hello

    I read a file using a file adapter and write to the database using DBAdapter table. In BPEL, I used activity to receive the entry from the file and call activity to call dbadapter.in between receive and call I used activity activity of transformation of transformation.the problem is that, after deployment it.i get following error two errors:

    (1) no recoverable system failure:
    < bpelFault > < faultType > 0 < / faultType > < bindingFault xmlns = "http://schemas.oracle.com/bpel/extension" > < a name = "summary" part > < summary > Exception is is produced when the link has been invoked. Exception occurred during invocation of the JCA binding: "JCA binding run reference"insert"operations have to: connection problem component binding JCA.". JCA Binding component is unable to create an outgoing connection of JCA (CCI). ReadWriteDB:WriteDB [WriteDB_ptt::insert (MydbCollection)]: The JCA Binding component could not establish an outbound connection of JCA CCI due to the following problem: BINDING. Error of JCA - 12510 JCA adapter localization resources. Unable to locate the adapter of JCA resource through the element of the binding file .jca & lt; factory connections / > The JCA Binding component is unable to startup of the resource adapter specified in the & lt;-factory connections / > element: location = 'EI, DB, null. The reason is most likely that 1) the resource adapter RAR file has not been deployed successfully to the WebLogic application server or 2) the "& lt;" jndi name > ' element in weblogic - ra.xml has not been defined in eis/DB/null. In the latter case, you need to add a new factory of connections from WebLogic JCA (deploy a RAR). Please fix this and then relaunch the Application Server, please make sure that the JCA connection factory and dependent connection factories have been set up with a sufficient limit for maximum connections Please also make sure that the physical connection to the EIS server is available and the backend itself accepts connections. ". The called JCA adapter threw an exception of resource. Please review the error message above carefully to determine a resolution. < Summary / > < / part > < part name = "detail" > < details > error location JCA resource adapter. Unable to locate the adapter of JCA resource through the element of the binding file .jca & lt; factory connections / > The JCA Binding component is unable to startup of the resource adapter specified in the & lt;-factory connections / > element: location = 'EI, DB, null. The reason is most likely that 1) the resource adapter RAR file has not been deployed successfully to the WebLogic application server or 2) the "& lt;" jndi name > ' element in weblogic - ra.xml has not been defined in eis/DB/null. In the latter case, you need to add a new factory of connections from WebLogic JCA (deploy a RAR). Please fix this and then restart the application server < / details > < / part > < part name = "code" > < code > 12510 < / code > < / piece > < / bindingFault > < / bpelFault >

    2 non recoverable system fault):
    Exception occurred when the link was invoked. Exception occurred during invocation of the JCA binding: "JCA binding run reference"insert"operations have to: connection problem component binding JCA.". JCA Binding component is unable to create an outgoing connection of JCA (CCI). ReadWriteDB:WriteDB [WriteDB_ptt::insert (MydbCollection)]: The JCA Binding component could not establish an outbound connection of JCA CCI due to the following problem: BINDING. Error of JCA - 12510 JCA adapter localization resources. Cannot find the adapter in JCA resources via the element of the binding .jca file <-factory connections / > The JCA Binding component is unable to startup of the resource adapter that is specified in the <-factory connections / > element: location = 'EI, DB, null. The reason is most likely that 1) the resource adapter RAR file has not been deployed successfully to the application server WebLogic or 2) the element '< jndi name >' in weblogic - ra.xml has not been set to eis/DB/null. In the latter case, you need to add a new factory of connections from WebLogic JCA (deploy a RAR). Please fix this and then relaunch the Application Server, please make sure that the JCA connection factory and dependent connection factories have been set up with a sufficient limit for maximum connections Please also make sure that the physical connection to the EIS server is available and the backend itself accepts connections. ". The called JCA adapter threw an exception of resource. Please review the error message above carefully to determine a resolution.

    Please suggest how to solve.

    Thank you

    Tejas

    Check your source data and your connection adapter db adpater deployments factory.
    Check if you have configured all steps of http://docs.oracle.com/cd/E15523_01/integration.1111/e10231/life_cycle.htm#BABBEDBF.
    Also, in your file .jca in your jdeveloper have named the location of connection-factory as "ist/DB/draw ' if so change it to one that you have created in the db adapter deployments.

  • Can not copy the database of res folder and write to the memory card

    I developed a small application using blackberry jde 7.0. I want to copy the database (.db) of res folder and write to the memory card. When I run in the Simulator, it throws exception "FileNotFound". But the file is located in the res folder.

    Help me guys...

    Here is the code

     copyFile("/Demo.db","file:///SDCard/Databases/Demo.db");
    
    //Copy to Memory card
    public void copyFile(String srFile, String dtFile)
    {
    try
    {
    FileConnection fconn;
    fconn = (FileConnection) Connector.open(dtFile,Connector.READ_WRITE);
    //if(!fconn.exists()) // if file does not exists , create a new one
    // {
    // fconn.create();
    // }
    InputStream is = (InputStream)getClass().getResourceAsStream(srFile);
    System.out.println("read" + String.valueOf(is.available()));
    OutputStream os =fconn.openOutputStream();
    byte[] buf = new byte[is.available()];
    int len;
    while ((len = is.read(buf)) > 0)
    {
    os.write(buf, 0, len);
    }
    is.close();
    os.close();
    }
    catch(IOException e)
    {
    System.out.println("Exception"+e.getMessage());
    }
    }
    

    The exception is

    File not found

    «When I run in the Simulator he throws exception "FileNotFound".»

    Which line is the rise of this?

    You might find the code in the sample application SQLiteDemo, which does almost the same thing, useful in the study to determine what went wrong.

  • message cannot write to the file destination 1016

    I try to export photos to a memory card and I get a message "cannot write to the file destination 1016. I was able to export several photos, then I could not export more. Help

    In general, memory cards are in FAT format that hold a number very limited file to the root - the safe way to put photos on a memory card is select them in Photos and export to a folder on the desktop and then use the finder to drag this file to Gendarmerie, unlocked memory card

    LN

  • Issue of table + write to the file

    Hello, I am using USB-6009 with Labview 8.5

    I searched and passed tutorial table and still confused about acquisition of data...:)

    So here's what I'm doing (simple)

    I have two tension analog (AI0 AI1) returns through the DAQ assistant

    and I would like to follow up respectively and finally want to write them in lvm format or csv format...

    Question 1.

    Can I have an example of table VI with the DAQ assistant? all the tutorials I went on

    they are only about numbers--not the dynamic data...

    I think of... convert data into DBL and reorganize somehow to each table to the graph of the monitor

    Question 2.

    so I cut the data by using the table to display the monitor, then I will add both the value of the data in table

    to write to the file? or... is it possible to write in the file directly from the Daq Assistant, write on the file VI?

    Quesetion 3.

    If so, could you tell me how this writing on a file to save the data? 1st column with odd rank-> AI0

    1st column with the same line-> A1... something like that?

    Thanks, I spent about 3 hours of that, google them, read the help of labview and helped a lot

    1. you should be able to double-click the convert to Dynamic Data and convert the waveform in a table.

    2. just connect the output of the VI DAQmx Express write it on the Express VI of LVM.

  • Write to the file of text formatting issues

    My apologies if I touch on a topic that is discussed elsewhere.  I have two questions, which seems to be related, I'll have to overcome the difficulties.  I date of blood collection, converting it to a temperature and then writes the timestamp, temperature, voltage, and original tension to the file.  Currently, when I write these values to the date and time of the file appear on a single line, temperature and tensions appear on the next line, and then there is a space before the pattern repeats.  In addition, before data are collected I write information in a header, and if you look at the .csv file attached, you will see that the data are that all offset a column to the left.  Any ideas how I can fix this problem?  My code is probably speaks for itself, but I really am a novice, so any general idea in the non-jargon terminology will humbly accept.  Cheers, Peter.

    GEO,

    Do not build your strings in an array of strings.  An array of strings are written a / line in the function "write text to a file.

    Use the function to concatenate strings and string together a tab character between the date/time and the first value.  The "write text to file function will add its own chain of end of LIFE at the end of writing.

  • write to the file at the end of the program

    I am trying to acquire data of resistance on a DAQmx channel. The data are acquired in a while loop.

    I need the program to keep storing data in a table that develops according to the incoming data and writes all data in a file when the program ends.

    I currently have an array of index with the iteration of the while loop wire its terminal index meter and a 'writing on a file of measure' vi placed outside the while loop. However, when I finish the program, there is no output file.

    What is the best way to do it in Labview 2011? If self-expanding table is not possible, can I pre-allocate a large size and I then it stores data but I'm going to have to again at the exit of all the data only once at the end of the program.

    Rather than build a huge range, using a configuration of producer/consumer .  The idea is to use a second loop that records your data that you acquire.  In this way, you can open the file before the loop, format and write the data to the file inside the loop, and then close the file at the end.  To send data to the loop of logging, use a queue.

    You can also use the DAQmx Configure in Streaming VI say DAQmx to save your data as it is read directly to a PDM file.  Much more effective than anything that you will come up with.

  • Error: "there was a disk error when you write to the file C\:Program files (x 86) \microsoft games\dungeon siege\resources\objects.dsres" during the installation of Dungeon Siege.

    When I try to install it it comes up with an error about 16% in the installation, saying that there is a disk error when you write to the file C\:Program files (x 86) \microsoft games\dungeon siege\resources\objects.dsres

    Any ideas?

    Hi MouseToe,

    What version of Dungeon Siege you trying to install?

    The cause of this problem could be the corrupted resource (.dsres) file or disk error. Here are some things you can do to solve the problem.

    Method 1: Run the disk check.

     

    Check the integrity of your hard disk for lost clusters and errors.

    To do this, follow the steps in this article: check a drive for errors

    Method 2: Defragment the hard disk.

    This improves the performance of your hard drive.

    Reference: improve performance by defragmenting your hard drive

    Method 3: Run the game as administrator.

    Here's how:

    (a) right click on the game configuration file.

    (b) choose 'Run as administrator'.

    Method 4: Try to install the game in a different folder or to a different drive

     

    Try to install the game in a different folder. If the computer has another hard disk, try to install the game on the other hard drive.

    Follow these steps.

    a. Insert the game disc in the drive.

    Note: Do not click on Quick Installation during installation.

    b. follow the setting menus until you see the change button.

    c. click change.

    d. in the path box, delete the existing path, and then type the following text:

    drive: \Program Files\Microsoftgame name Games\

    In this example,drive is the letter of the hard disk drive and the name of the game is the name of the game you are trying to install.

    e. click OK when finished.

    f. follow the instructions that appear on the screen to install the game.

    This should be it.

    For more information, please visit:

    http://support.Microsoft.com/dungeonsiegeiifaq

    For additional assistance, please post your concerns at the forum below.

    http://www.Microsoft.com/games/en-us/community/pages/forums.aspx

    Kind regards

    Shinmila H - Microsoft Support

    Visit our Microsoft answers feedback Forum and let us know what you think.

  • What makes "new queue path" to write to the File.vi worksheet? I need a better explanation than what is given.

    You are looking for assistance.

    What makes "new queue path" to write to the File.vi worksheet?  I need a better explanation than what is given.

    Thank you.

    You can call this function without wiring to a path of the input file.  If this is the case, the function prompts the user for input file using a pop up dialog box.  If a file is selected and you press OK, it is the path of the file that is out of the function as the new path of the file.  If you press the button cancel instead of OK, the "not a path" constant is the new output file pathname.  If the function is called with a wired file path entry dialog box appears, the same path of file entry becomes the new output file path.

  • collect the data to write to the file

    Hello everyone!

    I was wrong of wich pretty depressing problem my mind... for a few days. I have a VI with while the witch loop is part of the largest project... my goal is to collect data and save them to file after 1000 while loop activities... be more specific - after all done loop 1000 moves I want to write to the file, the number of strokes (in the 'Number' of an attachment photo) and the result of the value ('table') should be a kind of table (2columns 1000 lines)... I can't do more while ower loop all the VI because it allows the other VI to work... Can you suggest me sommething?

    .. .to while say you the activities of the do loop iterations?...

    Yes, it's wright, I couldn't find the wright expressin at the end of the night.

    OK I will try to write to the table line by line... I'll check up is it posible to add to an existing spradsheet of the file a line of data for 1000 times after each iteration of the loop... it might be more reliable because each iteration of the loop is device once in a 30 min, and if your PC loses power I lose all data.

    Thank you so much for the ideas!

  • Cannot save PDF as an image (JPEG, PNG, etc.). "Error trying to write to the file. This may be due to insufficient disk space.

    System specs

    OS X El Capitan

    Version 10.11.1

    MacBook Pro (retina, 15 inches, beginning 2013)

    Intel Core i7 2.8 GHz

    16 GB 1600 MHz DDR3

    Macintosh HD

    Intel HD Graphics 4000 1536 MB

    Adobe Acrobat XI

    Architecture: i386

    Build: 11.0.13.17

    AGA: 4.28.145

    CoolType: 5.11.141

    JP2K: 2.0.0.32097

    When you try to save any PDF to an image format, the message "error trying to write to the file. This may be due to insufficient disk space"appears.

    error.png

    However, there is more than enough disk space for the image file.

    disk space.png

    I noticed some error reports similar to mine with more and more often on this forum. Each of them must still be addressed.

    Problem exporting PDF to image files

    Can't export to JPEG - disc can be locked or full

    Problem exporting PDF to image files

    Acrobat X Pro error when save as JPEG: not enough disk space to perform operations

    Acrobat will be PDF is more secret in PNG format

    Problem with saving a PDF to JPEG file

    Error trying to write to the file. This may be due to not enough space (Page 1)

    This seems to be a problem independent of the operating system or version of the product. What happens and when can we expect a patch? The fact that Adobe is unable to save a PDF file to other file formats has been a permanent frustration of my colleagues and myself for some time. I would be very grateful to know a method to fix the error so that we no longer have to rely on third party software to do the job that your product is supposed to do.

    Also, if anyone out there is in the same boat, I encourage you to take the floor. I also encourage other people to try to save the PDF files as images and report if you encounter the same problem.

    Hi Geoffrey,.

    Thank you for pointing out this problem. Let me check a few details about this problem with Acrobat.

    In the meantime, please try this:

    Open a PDF in Acrobat

    Go to file > export to > Image > JPEG

    Save as dialog click on the settings button in the lower part

    In the color management pane

    Click on the drop down to RGB

    Select Off & Ok

    Save the file in JPEG format

    I would like to know if it works.

    Thank you

    Abhishek

Maybe you are looking for