Search code examples
javaandroidarraysfileinternal

android NULL values after reading a file into array


first of all i need to create text file in internal storage(if file does not exists) and then to read values line by line into array. I do not understand what i do wrong, why my reading from internal memory is not detecting my file and how should i fix that? (I suppose creating file and writing to it is correct)

How i want my data file to look like:

data
data
data
data
data
data

How I write values to file:

        FileOutputStream fOut = null;
        try {
            fOut = openFileOutput("VilniusWeatherVU.txt",MODE_WORLD_READABLE);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        String v33 = "data";
        String v12 = "data";
        String v3 = "data";
        String v11 = "data";
        String v6 = "data";
        String v1 = "data";

        try {
            fOut.write(v33.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fOut.write(v12.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fOut.write(v3.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fOut.write(v11.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fOut.write(v6.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fOut.write(v1.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            fOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

How i read values:

String[] array = new String[6];
        int index = 0;
        try{
            // Open the file that is the first
            // command line parameter
            FileInputStream fstream = new FileInputStream("VilniusWeatherVU.txt");
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
            //Read File Line By Line
            while ((strLine = br.readLine()) != null)   {
                // Print the content on the console
                //System.out.println (strLine);
                array[index]=strLine;
                index++;
            }
            //Close the input stream
            in.close();
        }catch (Exception e){//Catch exception if any
            System.err.println("Error: " + e.getMessage());
        }

How i check my array:

    for (int i = 0; i <6; i++){
       Log.v(LOG_TAG, "CHECK IF IT WORKED " + array[i]);
   }

What my logcat says:

11-24 16:06:56.886      359-359/app.sunshine.android.example.com.sunshine W/System.err﹕ Error: /VilniusWeatherVU.txt (No such file or directory)
11-24 16:06:56.895      359-359/app.sunshine.android.example.com.sunshine V/MyNewMain﹕ CHECK IF IT WORKED null
11-24 16:06:56.895      359-359/app.sunshine.android.example.com.sunshine V/MyNewMain﹕ CHECK IF IT WORKED null
11-24 16:06:56.895      359-359/app.sunshine.android.example.com.sunshine V/MyNewMain﹕ CHECK IF IT WORKED null
11-24 16:06:56.895      359-359/app.sunshine.android.example.com.sunshine V/MyNewMain﹕ CHECK IF IT WORKED null
11-24 16:06:56.895      359-359/app.sunshine.android.example.com.sunshine V/MyNewMain﹕ CHECK IF IT WORKED null
11-24 16:06:56.895      359-359/app.sunshine.android.example.com.sunshine V/MyNewMain﹕ CHECK IF IT WORKED null

please don't leave me alone on this one :(

Frunk requested:

i attempt to read from file in a different way:

        FileInputStream fin = null;
        try {
            fin = openFileInput("VilniusWeatherVU.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        int c;
        String temp="";
        try {
            while( (c = fin.read()) != -1){
                temp = temp + Character.toString((char)c);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
//string temp contains all the data of the file.
        try {
            fin.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

then i use logcat to check:

Log.v(LOG_TAG, "CHECK IF IT WORKED " + temp);

and what i get is:

11-24 16:24:38.345      334-334/app.sunshine.android.example.com.sunshine V/MyNewMain﹕ CHECK IF IT WORKED datadatadatadatadatadata

Solution

  • public class MyFragment extends Fragment
        {
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState)
            {
                view = inflater.inflate(R.layout.myfragment, container, false);
    
    
                writeFile("text.txt", view.getContext());
                String[] test = readFile("text.txt", view.getContext());
                if(test==null)
                {
                  // error to read file or file dont exists
                }else
                {
                  //read file
                }    
                return view;
            }
    
     public static String   newline = System.getProperty("line.separator");
    
    // write file
    private void writeFile(String filename, Context context)
    {
    
        File file = new File(context.getFilesDir(), filename);
    
        // write data if file dont exists
        if (!file.exists())
        {
            String string = "data" + newline + "data" + newline + "data"
                    + newline + "data" + newline + "data" + newline + "data"
                    + newline;
    
            FileOutputStream outputStream;
    
            try
            {
                outputStream = context.openFileOutput(filename,
                        Context.MODE_PRIVATE);
                outputStream.write(string.getBytes());
                outputStream.close();
    
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }
    
    // read file and convert data to String array
    private String[] readFile(String filename, Context context)
    {
        try
        {
            File file = new File(context.getFilesDir(), filename);
            if (!file.exists())
            {
                return null;
            }
            FileInputStream fis = new FileInputStream(file);
            byte[] dataByte = new byte[(int) file.length()];
            fis.read(dataByte);
            fis.close();
            String data = new String(dataByte);
            // slit string with newline <\n>
    
            return data.split(newline);
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    
    
    }
    }