There are file explorer style apps that will open it. Or you could download Csv Viewer app from Play Store.
Blurb from it.
CSV File Viewer For Android | CSV Reader - view small and large-sized CSV files.
CSV Reader - Simple, fast, and powerful tool for reading csv files.
I am not associated with it.
Answer from Rohit Gupta on Stack ExchangeThere are file explorer style apps that will open it. Or you could download Csv Viewer app from Play Store.
Blurb from it.
CSV File Viewer For Android | CSV Reader - view small and large-sized CSV files.
CSV Reader - Simple, fast, and powerful tool for reading csv files.
I am not associated with it.
Any office suite should be able to open it. I recommend using CollaboraOffice (https://play.google.com/store/apps/details?id=com.collabora.libreoffice&hl=en_US), I successfully opened .csv files with it in table format and can also edit it. The app has no ads and it is open source.
(I am not promoting/endorsing the app)
Import csv data on android (or the web)
How to read csv file in android? - Stack Overflow
How can I read and show data from a csv file in Android? - Stack Overflow
database - Searching in .csv files on Android smartphone - Software Recommendations Stack Exchange
Videos
Try OpenCSV - it will make your life easier.
First, add this package to your gradle dependencies as follows
implementation 'com.opencsv:opencsv:4.6'
Then you can either do
import com.opencsv.CSVReader;
import java.io.IOException;
import java.io.FileReader;
...
try {
CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
// nextLine[] is an array of values from the line
System.out.println(nextLine[0] + nextLine[1] + "etc...");
}
} catch (IOException e) {
}
or
CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
List myEntries = reader.readAll();
Edit after comment
try {
File csvfile = new File(Environment.getExternalStorageDirectory() + "/csvfile.csv");
CSVReader reader = new CSVReader(new FileReader(csvfile.getAbsolutePath()));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
// nextLine[] is an array of values from the line
System.out.println(nextLine[0] + nextLine[1] + "etc...");
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "The specified file was not found", Toast.LENGTH_SHORT).show();
}
If you want to package the .csv file with the application and have it install on the internal storage when the app installs, create an assets folder in your project src/main folder (e.g., c:\myapp\app\src\main\assets\), and put the .csv file in there, then reference it like this in your activity:
String csvfileString = this.getApplicationInfo().dataDir + File.separatorChar + "csvfile.csv"
File csvfile = new File(csvfileString);
The following snippet reads a CSV file from the raw resources folder (which will be packed into your .apk file upon compilation).
Android by default does not create the raw folder. Create a raw folder under res/raw in your project and copy your CSV File into it. Keep the name of the CSV file lower case and convert it into text format when asked. My CSV file name is welldata.csv.
In the snippet, WellData is the model class (with constructor, getter and setter) and wellDataList is the ArrayList to store the data.
private void readData() {
InputStream is = getResources().openRawResource(R.raw.welldata);
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, Charset.forName("UTF-8")));
String line = "";
try {
while ((line = reader.readLine()) != null) {
// Split the line into different tokens (using the comma as a separator).
String[] tokens = line.split(",");
// Read the data and store it in the WellData POJO.
WellData wellData = new WellData();
wellData.setOwner(tokens[0]);
wellData.setApi(tokens[1]);
wellData.setLongitude(tokens[2]);
wellData.setLatitude(tokens[3]);
wellData.setProperty(tokens[4]);
wellData.setWellName(tokens[5]);
wellDataList.add(wellData);
Log.d("MainActivity" ,"Just Created " + wellData);
}
} catch (IOException e1) {
Log.e("MainActivity", "Error" + line, e1);
e1.printStackTrace();
}
}
For context: I'd like to compare election results over multiple elections from the past few years in my district.
The data I got access to is quite a broad arrangement of text files with pages of data separated by varying amounts of semicolons. I tried to simply convert to .csv, but that way excel just sorts them into like a thousand columns, but doesn't add a single row.
I tried the webversion, but next to the fact that its very glitchy, the whole split into columns isn't particularly useful if I don't want to spend hours dragging data vertically.
What I like to do is arrange the data quite simply by minor district, amount of voters, amount of votes for party A and so on, and ultimately compare it with other elections in a single sheet.
Do you have any idea how I could import the data in a way that will save me all that? In theory, it seems pretty simple, but right now it seems impossible to me, despite having all the data delivered on a silver plate
You are indeed confused and mixing some things up. Let's go step by step.
STEP BY STEP, QUESTION BY QUESTION
A class and an activity are not the same. You can read about it here and here. To put it in an easy way:
- A class is a Java form.
- For each screen in your app you will have a different activity. Each of them might have more than one class.
Then, in Android, if you want to do any app (including the one which needs to read the .csv) you will need an activity, so that there is at least one screen in which the user can be. That is to say that the first thing you will need to do is to create an activity and add it to the manifest as the default activity (so that it appears together with the rest of apps). Do this (create activity), and then this (set it as default).
Now you should be able to try the app in an emulator or a physical device and see an empty screen that does nothing.
So far, so good. Now to the .csv reading problem. We will read the code as soon as the user enters the activity, when the activity is created (in the onCreate method). There should be a piece of code like the following one in your activity, otherwise, create it.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
- Now we will proceed to read the csv inside the onCreate (you could also do it when the user presses a button, etc.). Note that one thing is reading it and the other one is creating visible UI lists with it. Here you can see how to read a csv file (either if you have it in the sd or if you pack it with the app).
EDIT. Let's deep deeper into this step (5). As stated in the answer I have referenced, you need to:
Add this package to your gradle dependencies as follows
implementation 'com.opencsv:opencsv:4.6'
And then modify the onCreate (or wherever you want to read the csv):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
// OPTION 1: if the file is in the sd
File csvfile = new File(Environment.getExternalStorageDirectory() + "/csvfile.csv");
// END OF OPTION 1
// OPTION 2: pack the file with the app
/* "If you want to package the .csv file with the application and have it install on the internal storage when the app installs, create an assets folder in your project src/main folder (e.g., c:\myapp\app\src\main\assets\), and put the .csv file in there, then reference it like this in your activity:" (from the cited answer) */
String csvfileString = this.getApplicationInfo().dataDir + File.separatorChar + "csvfile.csv"
File csvfile = new File(csvfileString);
// END OF OPTION 2
CSVReader reader = new CSVReader(new FileReader("csvfile.getAbsolutePath()"));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
// nextLine[] is an array of values from the line
System.out.println(nextLine[0] + nextLine[1] + "etc...");
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "The specified file was not found", Toast.LENGTH_SHORT).show();
}
}
FINALLY
Right, so this would be it. If you also wanted to represent this data in a list, a grid, etc., well, this is another question! However, just in case, you just need to use again the activity you created, but add the ListView to your layout and feed the list also in onCreate (for example). See a tutorial here.
You can use TableUIBuilder to read your CSV file and render it as TableLayout as follows:-
((ViewGroup) findViewById(R.id.tableContainer)).addView(new TableUIBuilder(this, "student_records.csv").build());
There is a small app called aGrep which I use for such search on an old Android. It is open-source and works like "grep" but with an interface.
- User can specify file extension types e.g. csv, txt
- User can specify directory to search
- It can also read SDcard. etc
It has not been updated in a while, but does the job.
Repository: https://github.com/jiro-aqua/aGrep
You can use markor from https://f-droid.org/en/packages/net.gsantner.markor a markdown text editor that also supports csv files.
Once the csv is loaded you can switch to preview-mode where you can see the data in a tabular layout and use the search-function to find matching lines

For details see https://github.com/gsantner/markor/blob/master/doc/2023-06-02-csv-readme.md
CSV stands for Comma-Separated Values. Quite good explanation can be found at wiki: CSV. Since you're programming on Android platform consider using one of availible Java libraries such as OpenCSV or JavaCSV.
Put you .csv in the assert folder and access it as follow
I was using .csv to get the list of counter in my application..
public ArrayList<String> COUNTRIES = new ArrayList<String>();
try {
is = res.getAssets().open("country.csv");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null)
COUNTRIES.add(line);
}
catch (IOException ex) {
// handle exception
}
finally {
try {
is.close();
}
catch (IOException e) {
// handle exception
}
}