我不能在java中将文本文件作为只读模式

时间:2014-02-06 09:50:27

标签: java file-io

package com.studytrails.tutorials.springremotingrmiserver;

import java.lang.Object;
import java.awt.Desktop;
import java.io.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.Resource;

public class GreetingServiceImpl implements GreetingService 
{
    @Override
    public String getGreeting(String name) {
        return "Hello " + name + "!";
    }

    public String getText() {
        ApplicationContext appContext = new ClassPathXmlApplicationContext(new String[]{"spring-config-server.xml"});
        Resource resource = appContext.getResource("file:D:\\text\\test.txt");
        StringBuilder builder = new StringBuilder();
        try {
            InputStream is = resource.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            File temp=File.createTempFile("output", ".tmp");
            String filePath=temp.getAbsolutePath();
            System.out.println(""+filePath);
            String tem=temp.getName();
            String line;
            PrintWriter out = new PrintWriter(new FileWriter(tem));
            //System.out.println(""+filePath);
            while ((line = br.readLine()) != null) {
                out.println(line);
            }
            temp.setReadOnly();
            String[] cmd = {"notepad",tem}; 
            Runtime runtime = Runtime.getRuntime();
            Process proc = runtime.exec(cmd);
            // proc.getInputStream();
            out.close();
            br.close();
            //temp.deleteOnExit();
            }
        catch(IOException e) {
            e.printStackTrace();
        }
        return builder.toString();
    }
}

在上面的代码中,我无法set_adonly();命令到临时文件。使用所有选项显示的文件可以建议如何使临时文件不被修改,甚至无法保存到其他位置。我只需要在程序运行时显示此文件。在此期间,用户不会更改任何内容,也不能将其保存为其他位置。

1 个答案:

答案 0 :(得分:1)

我建议在使用之前关闭文件(通过记事本):

        PrintWriter out = new PrintWriter(new FileWriter(tem));
        //System.out.println(""+filePath);
        while ((line = br.readLine()) != null) {
            out.println(line);
        }
        out.close();
        temp.setReadOnly();
        String[] cmd = {"notepad",tem}; 
        Runtime runtime = Runtime.getRuntime();
        Process proc = runtime.exec(cmd);
        // proc.getInputStream();

为避免用户将文件移动到其他位置,您可以在临时文件夹中另外创建临时文件,并使文件夹也只读。但是如果用户可以阅读,他们通常可以文件复制到另一个位置。如果我记得很清楚,在Windows中你可以标记为读取但是阻止复制文件(当然是通过Windows)。