Как использовать чтение текстового файла с разделителями-запятыми, используя split () в java / jsp для разделения каждого элемента - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть текстовый файл, который таков:

"имя, адрес электронной почты, пол"
Джо, Джо @ g.com, мужчина, Лондон
Фред, Фред @ г.com, мужчина, Нью-Йорк

Я пытаюсь прочитать эти данные в HTML-таблицу, используя jsp / java.На данный момент я могу прочитать их все в таблицу, но вся строка появляется в одной ячейке под заголовками.Так что на данный момент они все появятся под name .как бы я разбил каждый элемент текстового файла с разделителями-запятыми, чтобы они отображались под правильным заголовком.

    <tr>
      <td>Name</td>
      <td>Email</td>
      <td>Gender</td>
      <td>Location</td>
    </tr>

    <%

    List<String > list =new ArrayList<String>(); 
    FileInputStream in = new FileInputStream("people.txt"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in)); 


    String strLine ="", tmp; 
    while ((tmp = br.readLine()) != null){  
        strLine =tmp+"\n"+strLine; 
        list.add(tmp); 
        } 

Ответы [ 5 ]

1 голос
/ 29 февраля 2012

Использование String.split():

String[] parts = tmp.split(",");

Если tmp содержит "joe,joe@g.com,male,london", тогда:

parts[0] = "joe"
parts[1] = "joe@g.com"
parts[2] = "male"
parts[3] = "london"

Я не знаком с JSP, но если цель while должен преобразовать каждую строку, прочитанную из br в HTML <tr>...</tr> и добавить к list затем:

while ((tmp = br.readLine()) != null)
{
    String[] parts = tmp.split(",");
    if (4 == parts.length) // Not sure what validation is required, if any.
    {
        StringBuilder tr = new StringBuilder("<tr>");
        for (String s: parts)
        {
            tr.append("<td>")
              .append(s)
              .append("</td>");
        }
        tr.append("</tr>")
        list.add(tr.toString()); 
    }
}
0 голосов
/ 29 февраля 2012

Предположим, что ваш текстовый файл содержит информацию об имени клиента и его адресе.Таким образом, мы сохраняем этот файл как customer.txt на вашем жестком диске.

Далее вам нужно создать пакет с именем "com.customer.table.model" в папке вашего проекта.Создайте новый класс Java-бина с именем «Customer.java» в этом пакете.Скопируйте приведенный ниже код и включите его в класс Customer.

package com.customer.table.model;

/**
 *
 * @author sarath_sivan
 */
public class Customer {

    private String name;
    private String email;
    private String gender;
    private String location;

    public Customer() {}

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return this.email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getGender() {
        return this.gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getLocation() {
        return this.location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

}

Далее необходимо создать еще один пакет в каталоге вашего проекта.Дайте имя пакета "com.customer.table.service" для нового.Затем создайте Java-класс с именем «FileReader» и включите в него приведенный ниже код.

package com.customer.table.service;


import com.customer.table.model.Customer;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author sarath_sivan
 */
public class FileReader {

    public static List<Customer> readFile(String fileName) throws FileNotFoundException, IOException { // reading each line from the customer.txt file, formatting it and returning a as a list for displaying in in our jsp page.
        FileInputStream fileInputStream = new FileInputStream(fileName);
        DataInputStream dataInputStream = new DataInputStream(fileInputStream);
        InputStreamReader inputStreamReader = new InputStreamReader(dataInputStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        List<Customer> customerList = new ArrayList<Customer>(); String readLine;

        while((readLine=bufferedReader.readLine())!=null) {
            System.out.println(readLine);
            customerList.add(formatReadLine(readLine));
        }

        dataInputStream.close();
        return customerList;
    }

    public static Customer formatReadLine(String readLine) {
        String[] splits = split(readLine);
        Customer customer = new Customer();
        customer.setName(getTableDataFormat(splits[0]));
        customer.setEmail(getTableDataFormat(splits[1]));
        customer.setGender(getTableDataFormat(splits[2]));
        customer.setLocation(getTableDataFormat(splits[3]));
        return customer;
    }

    public static String[] split(String readLine) { // splitting each line from the customer.txt file with "," as the delimiter
        return readLine.split(",");
    }

    public static String getTableDataFormat(String splits) { // Method for appending <td> tags with the formatted data
        StringBuilder tableData = new StringBuilder();
        tableData.append("<td>");
        tableData.append(splits);
        tableData.append("</td>");
        return tableData.toString();
    }

}

После того, как оба вышеуказанных файла класса созданы, мы можем перейти на страницу jsp, которую вы хотели бы отобразитькаждый элемент извлекается из текстового файла запятой.Теперь создайте новую страницу jsp, скажем index.jsp, в папке вашего основного веб-проекта.Скопируйте и вставьте в него приведенный ниже код.

 <%-- 
    Document   : index
    Created on : 29 Feb, 2012, 11:30:04 PM
    Author     : sarath_sivan
--%>

<%@page import="com.customer.table.service.FileReader"%>
<%@page import="com.customer.table.model.Customer"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">


<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Customer Information</h1>
        <table border="1" align="left">
            <tr>
                <th>Name</th>
                <th>Email</th>
                <th>Gender</th>
                <th>Location</th>
            </tr>
        <%  try {
                List<Customer> customerList = new ArrayList<Customer>();
                String fileName = "C:/Users/compaq/Desktop/customers.txt";
                customerList = FileReader.readFile(fileName);
                for(Customer customer : customerList) {
                    out.println("<tr>");
                    out.println(customer.getName()+customer.getEmail()+customer.getGender()+customer.getLocation());
                    out.println("</tr>");
                }
            } catch(Exception e) {
               e.printStackTrace();
            }

        %>
        </table>
    </body>
</html>

Теперь он готов к развертыванию.Вы можете запустить свой проект на любом сервере.Вы можете увидеть все данные, включенные в файл customer.txt в вашем index.jsp, в виде таблицы, как показано ниже.Точно так же вы можете добавить больше деталей, изменив приведенный выше код в соответствии с вашими требованиями.

    Customer Information
Name    Email   Gender  Location
joe joe@g.com   male    male
fred    fred@g.com  male    male

Надеюсь, это спасет вашу цель ....!

Спасибо вам ..!

0 голосов
/ 29 февраля 2012

Не зря, но вы можете найти тонны образцов на этом, если вы просто погуглили его.При этом RoseIndia.net имеет простой пример того, как читать CSV из файла с использованием JSP:

<%@ page import="java.io.*"%>
<html>
<body>
<% 
    String fName = "c:\\csv\\myfile.csv";
    String thisLine; 
    int count=0; 
    FileInputStream fis = new FileInputStream(fName);
    DataInputStream myInput = new DataInputStream(fis);
    int i=0; 
%>
<table>
<%
while ((thisLine = myInput.readLine()) != null)
{
    String strar[] = thisLine.split(",");
    for(int j=0;j<strar.length;j++)
    {
        if(i!=0)
        {
            out.print(" " +strar[j]+ " ");
        }
        else
        {
            out.print(" <b>" +strar[j]+ "</b> ");
        }
    } 
    out.println("<br>");
    i++;
} 
%>
</table>
</body>
</html>

Надеюсь, это поможет!

0 голосов
/ 29 февраля 2012

tmp.split("\\s*,\\s*") возвращает массив ваших элементов: имя, адрес электронной почты, пол местоположение

0 голосов
/ 29 февраля 2012

Используйте класс java.util.Scanner.У сканера есть метод useDelimiter ().Установите разделитель на запятую.

 line = br.readLine();
 sc = new Scanner(line);
 sc.useDelimiter(",");
 name = sc.next();
 gender = sc.next();
 email = sc.next();
 location = sc.next();

 // put this in a loop to do it for every line of text 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...