2012-04-18 3 views
2

У меня есть требование, в котором мне нужно прочитать содержимое текстового файла через весеннюю структуру. Для этого я сделал метод в моем классе службы реализации,метод весной читать txt-файл

ценам ниже
public String readFile(File file) 

Этот метод будет принимать имя файла в качестве входных данных и прочитать файл.

я писал код в XML весной, как ценам ниже

<bean id="fstream" class="java.io.FileInputStream"> 
    <constructor-arg value="C:/text.txt" /> 
</bean> 
<bean id="in" class="java.io.DataInputStream"> 
    <constructor-arg ref="fstream"/> 
</bean> 
<bean id="isr" class="java.io.InputStreamReader"> 
    <constructor-arg ref="in"/> 
</bean> 
<bean id="br" class="java.io.BufferedReader"> 
    <constructor-arg ref="isr"/> 
</bean> 

После кода идет в моем ме-

public String readFile(File file) 
{ 
    String line = null; 
    String content = ""; 

    try 
    { 
     ApplicationContext context = new ClassPathXmlApplicationContext("FileDBJob.xml"); 

     BufferedReader br = (BufferedReader) context.getBean("br"); 

     while((line = br.readLine())!=null) 
      content = content.concat(line); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return content; 
} 

Но здесь проблема в том, что мне нужно жёстко имя файла в XML, поэтому нет параметра файла.

Просьба помочь в поиске решения. Поскольку я новичок в весне и стараюсь изо всех сил, так что возможно, что я что-то упустил. Любая помощь будет очень полезной.

+0

Посмотрите на PropertyResolver или AbstractEnvironment of Springframework. – andih

ответ

4

Не вводите потоки и считыватели, это не так, как предполагается использовать Spring. Я бы впрыснуть сам файл:

public class MyFileReader { 

    private File file; 

    public String readFile() { 
     StringBuilder builder = new StringBuilder(); 
     BufferedReader reader = null; 
     try { 
      reader = new BufferedReader(new FileReader(getFile())); 
      String line = null; 
      while ((line = reader.readLine()) != null) 
       builder.append(line); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      closeQuietly(reader); 
     } 
     return builder.toString(); 
    } 

    private void closeQuietly(Closeable c) { 
     if (c != null) { 
      try { 
       c.close(); 
      } catch (IOException ignored) {} 
     } 
    } 

    public File getFile() { 
     return file; 
    } 

    public void setFile(File file) { 
     this.file = file; 
    } 

} 

Тогда ваш боб Защиту выглядит следующим образом:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:app.properties"/> 
</bean> 

<bean class="com.myapp.MyFileReader"> 
    <property name="file" value="${filePath}" /> 
</bean> 

Все, что осталось, чтобы создать свой app.properties файл с правильной информацией. Вы также можете установить значение, вызвав приложение с помощью -DfilePath=/foo/bar/whatever.txt

+1

спасибо за ваши входы. После исправления кода моя проблема - FileSystemResource res = new FileSystemResource (file.getName()); BufferedReader br = новый BufferedReader (новый InputStreamReader (res.getInputStream())); while ((line = br.readLine())! = null) content = content.concat (строка); –

+0

Где я могу поместить файлы определения bean-файлов? 'application-context.xml' или' spring-servlet.xml'? –

0

Я проверил этот код на его работу ..... Попробуйте реализовать .... вам нужно скопировать файл schedular.xml в конфигурацию ur proj (где applicationContext.xml-файл в ур-приложении и он должен быть contextConfigLocation WEB-INF/config/*. xml в ur web.xml файле).

Then configure SvhedularTask bean in ur service classes xml file....it will trigger for every minute. 

////SCHEDULARTASK.JAVA////// 

import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.Date; 

import javax.servlet.ServletContext; 

import org.springframework.web.context.ServletContextAware; 


/** 
* The Class SchedulerTask. 
*/ 
public class SchedulerTask implements ServletContextAware{ 

    private ServletContext servletContext; 

    @Override 
    public void setServletContext(ServletContext arg0) { 
     // TODO Auto-generated method stub 
     this.servletContext = arg0; 
    } 

    public void unZipProcess() throws IOException{ 
     System.out.println(servletContext); 
     File folder = new File("C:/Users/rerrabelli/Desktop/test"); 
     File[] listOfFiles = folder.listFiles(); 
     if (listOfFiles != null){ 
      for (int i = 0; i < listOfFiles.length; i++) { 
       if (listOfFiles[i].isFile()) { 
        if (listOfFiles[i].getName().endsWith(".txt")) { 
         File file = new File("C:/Users/rerrabelli/Desktop/test" + File.separator 
           + listOfFiles[i].getName()); 
         long millisec = file.lastModified(); 
         Date dt = new Date(millisec); 
         long difference = new Date().getTime()-dt.getTime(); 
         System.out.println((difference/1000)/60); 
         if(((difference/1000)/60)<1){ 
          FileInputStream fin = new FileInputStream(
            file); 
          ByteArrayOutputStream tmp = new ByteArrayOutputStream(); 
          byte b; 
          while ((b = (byte) fin.read()) != -1) { 
           tmp.write(b); 
          } 
          byte[] customerData = tmp.toByteArray(); 
          String data = new String(customerData); 
          System.out.println(data); 
          servletContext.setAttribute(file.getName(), data); 
         } 
        } 
       } 
      } 
     } 
     System.out.println(servletContext.getAttribute("test.txt")); 
    } 

} 

//////APPLICATION CONTEXT.xml///////// 

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 



    <bean id="schedulerTask" class="com.altimetrik.simreg.service.impl.SchedulerTask"> 

    </bean> 
</beans> 

====================== 
SCHEDULAR.XML 
=========== 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd" > 
<beans> 

    <import resource="applicationContext.xml"/> 

    <bean id="schedulerTask1" 
     class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
     <property name="targetObject"> <ref bean="schedulerTask" /> </property> 
     <property name="targetMethod"> <value>unZipProcess</value> </property> 
     <property name="concurrent"> <value>false</value> </property> 
    </bean> 

    <bean id="UnzipTrigger" 
     class="org.springframework.scheduling.quartz.CronTriggerBean"> 
     <property name="jobDetail"> <ref bean="schedulerTask1" /> </property> 
     <property name="cronExpression"> <value>0 0/1 * * * ?</value> </property> 
    </bean> 

    <bean 
     class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
     <property name="triggers"> 
      <list> 
       <!-- Add triggers here--> 
       <ref bean="UnzipTrigger" /> 
      </list> 
     </property> 
    </bean> 
</beans> 
Смежные вопросы