如何读取CSV中的值并保留其值

时间:2016-12-15 07:34:19

标签: java android csv

我已经在堆栈和网页上搜索了很多,用于解析CSV文件 但我没有得到我想要的东西。

我有CSV格式的表格,

enter image description here

我想要的是,如果我给出" ID"(这是0,1,2,3 ...)它应该给我正确的值,即,如果我给

" 2"它应该归还给我"你好,你好吗?"。

" 4"它应该归还给我"你更喜欢什么茶?"

如何实现这一点?
现在我将我的CSV文件保存在原始文件夹中。

任何帮助都将适用

2 个答案:

答案 0 :(得分:0)

您可以将数据保存为CSV格式: -

ArrayList<TableData> arrayList=new ArrayList<>();
        arrayList.add(new TableData(1,"Hello"));
        arrayList.add(new TableData(2,"How are u"));
        arrayList.add(new TableData(3,"I am fine"));
        arrayList.add(new TableData(4,"Thank You"));

        File file;
        File root   = Environment.getExternalStorageDirectory();
        if (root.canWrite()){
            File dir    =   new File (root.getAbsolutePath() + "/PersonData");
            dir.mkdirs();
            file   =   new File(dir, "Data.csv");
            FileOutputStream out   =   null;
            try {
                // write to byte array
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                DataOutputStream dos = new DataOutputStream(baos);
                for (TableData element : arrayList) {
                    dos.writeUTF(String.valueOf(element.id));
                    dos.writeUTF(String.valueOf(element.name));
                }
                byte[] bytes = baos.toByteArray();
                out = new FileOutputStream(file);

                out.write(bytes);
                out.close();
            }catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

并将其改为: -

File file;
        File root   = Environment.getExternalStorageDirectory();

            File dir    =   new File (root.getAbsolutePath() + "/PersonData");
            dir.mkdirs();
            file   =   new File(dir, "Data.csv");


        Uri u1  =   null;
        u1  =   Uri.fromFile(file);
        try {
            FileInputStream inputStream=new FileInputStream(file);
            String input="2";
            String previousValue="";
            ByteArrayInputStream bais = new ByteArrayInputStream(readFully(inputStream));
            DataInputStream in = new DataInputStream(bais);
            while (in.available() > 0) {
                String element = in.readUTF();
                if(previousValue.equalsIgnoreCase(input)){
                    textView.setText(element);
                }
                previousValue=element;

            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

将inputStream转换为byte []的方法: -

public static byte[] readFully(InputStream input) throws IOException
    {
        byte[] buffer = new byte[8192];
        int bytesRead;
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        while ((bytesRead = input.read(buffer)) != -1)
        {
            output.write(buffer, 0, bytesRead);
        }
        return output.toByteArray();
    }

答案 1 :(得分:0)

创建一个单独的类来读取CSV文件: -

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Redirect to HTTPS" stopProcessing="true">
                    <match url="(.*)"/>
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$"/>
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent"/>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

现在在你的活动中调用它: -

    public class CSVFile {
        InputStream inputStream;

        public CSVFile(InputStream inputStream){
            this.inputStream = inputStream;
        }

        public List read(){
            List resultList = new ArrayList();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            try {
                String csvLine;
                while ((csvLine = reader.readLine()) != null) {
                    String[] row = csvLine.split(",");
                    resultList.add(row);
                }
            }
            catch (IOException ex) {
                throw new RuntimeException("Error in reading CSV file: "+ex);
            }
            finally {
                try {
                    inputStream.close();
                }
                catch (IOException e) {
                    throw new RuntimeException("Error while closing input stream: "+e);
                }
            }
            return resultList;


   }
}