ورود

View Full Version : سوال: با جاوا چطور میشه از فایل Sam ویندوز کپی گرفت؟



po0ya_jo0n
سه شنبه 07 اردیبهشت 1389, 06:53 صبح
میخام از فایل Sam ویندوز در آدرس زیر :

C:\Windows\System32\config

یه کپی بگیرم مثلا روی فلش مموری و یا هر جا. یا توی JTextField نشون بده

وولی متأسفانه با این سورس نتونستم. ایراد کار کجاست؟


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

class form1 extends JFrame implements ActionListener{
JTextArea ta1=new JTextArea(10,50);
JScrollPane sp1=new JScrollPane(ta1);
JLabel l1=new JLabel("File Name:");
JTextField t1=new JTextField(40);
JButton b1=new JButton("Save");
JButton b2=new JButton("Open");
form1(){
getContentPane().setLayout(new FlowLayout());
getContentPane().add(sp1);
getContentPane().add(l1);
getContentPane().add(t1);
getContentPane().add(b1);
getContentPane().add(b2);
b1.addActionListener(this);
b2.addActionListener(this);
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource()==b1){
try{
//define a file to write/save
FileOutputStream file1=new FileOutputStream(t1.getText());
String fc=ta1.getText();
//save to file--convert string to array of bytes through getBytes() method
file1.write(fc.getBytes());
file1.close();
JOptionPane.showMessageDialog(this,"Saved");
}
catch(Exception e1){
JOptionPane.showMessageDialog(this,"File write error");
}
}
if(ae.getSource()==b2){
try{
//define a file to read/open
FileInputStream file2=new FileInputStream(t1.getText());
//find file size and save it into fsize variable
int fsize=file2.available();
//define an array of bytes
byte[] buffer=new byte[fsize];
//read file contents and save it into buffer variable
file2.readline(buffer);
file2.close();
//convert an array of bytes to String
String fc=new String(buffer);
ta1.setText(fc);
}
catch(Exception e1){
JOptionPane.showMessageDialog(this,"File read error");
}
}
}

public static void main(String args[]){
form1 frm=new form1();
frm.setSize(580,400);
frm.setLocation(100,100);
frm.setVisible(true);
}
}
با تشکر

saeedIRHA
سه شنبه 07 اردیبهشت 1389, 12:12 عصر
اگر ممکن هست error که برنامت میده رو بذار که بشه بیشتر کمکت کرد
اما بعید میدونم بتونی‌ این کارو بکنی‌. فایل Sam سطح دسترسی‌‌های (Permission)‌های خاص خودش رو داره که اجازه نمید
ازش چیزی خوانده بشه هنگامی که ویندوز بالا هستین، مگر اینکه یا با لینوکس بالا بیای و بخونیش یا از نرم افزار‌های استفاده کنی‌ که از فایل Sam برات Dump بگیرن.

موفق باشید

po0ya_jo0n
سه شنبه 07 اردیبهشت 1389, 12:51 عصر
اگر ممکن هست error که برنامت میده رو بذار که بشه بیشتر کمکت کرد


به جای ارور همون Exceptionی که تعریف کردم رو می گیره



catch(Exception e1){
JOptionPane.showMessageDialog(this,"File read error");
}


ولی برای کار با فایل ها جاوا مگه تمام فایل ها با تمام پسوند ها رو اول به صفر و یک تبدیل نمیکنه؟

بعد به هر حالتی و فرمتی که بخایم میتونیم برگردونیم و ازش استفاده کنیم (و یا ذخیره کنیم)

مثلا من اینجا گفتم از صفر و یک تبدیلش کن به String و بریز توی JTextFieldی که اسمش t1 هست :



FileInputStream file2=new FileInputStream(t1.getText());
//find file size and save it into fsize variable
int fsize=file2.available();
//define an array of bytes
byte[] buffer=new byte[fsize];
//read file contents and save it into buffer variable
file2.readline(buffer);
file2.close();
//convert an array of bytes to String
String fc=new String(buffer);
ta1.setText(fc);


ولی به نظرم جاوا فایل Sam رو می گیره ولی به جای اینکه بگم محتویاتش رو به String تبدیل کن و setText کن، باید بنویسم یه جای دیگه کپی کن (که دستورشو یادم رفته)

به نظرم این جوری شاید بشه فایل Sam رو کپی کرد یه جای دیگه !

اونایی که کار با فایل ها رو خوب بلدن شاید بهتر بدونن منظورم چیه

با تشکر

jlover
سه شنبه 07 اردیبهشت 1389, 19:57 عصر
به جای ارور همون Exceptionی که تعریف کردم رو می گیره



آخرش رونوشت متن استثنای چاپ شده در خروجی رو اینجا قرار ندادین !

شرمنده که بدون نگاه دقیق به کدهاتون دارم نظر میدم، بخاطر اینکه خطوط زیادی از کدهاتون ارتباطی به مشکلی که میفرمایید نداره و فقط باعث طولانی شدن کل کدهایی که اینجا گذاشتین و در نتیجه عدم رغبت من به مطالعه شون شده ...

* باز کردن یک فایل (یا اصولن دسترسی به اون) در نهایت از طریق کدهای بومی و بوسیله ی سیستم عامل انجام میشه، چون که این فایل تو سیستم فایل سیستم عامل سامان داده شده ! (احتمال خیلی خیلی زیاد یکی از خطوط بالای پشته ی فراخانی متد چاپ شده در استثنایی که قرار ندادید به ()native open ختم میشه، میتونید به کد منبع سری بزنید..)

پس سیستم عامل باید اجازه ی این کار رو به برنامه ی کاربردی (حالا هر چی) بده، من تا حالا اسم این فایل (sam) رو نشنیدم ! اما احتمال میدم یکی از فایلهای سیستمیه که اجازه ی باز کردنشو نداشته باشین و شاید توی safe mode بتونید اینکار رو انجام بدین

در ضمن پیشنهاد میکنم اگر با فایلها و سیتم فایل زیاد کار میکنید از این به بعد به سراغ nio2 که همراه با jdk7 ارایه شده و تقریبن دیگه تکمیله استفاده کنید.
اگه نگاهی به Java Tutorials قسمت basic I/O و بخش معرفی nio2 بندازید، همین فرداش میرید خودتون رو با API جدید تطبیق میدید و از این کتابخونه ی قوی استفاده میکنید. فوق العاده ست. من تو یه برنامه ی بعدیم حتمن ازش استفاده میکنم...
حالا همونجا شاید اطلاعات بیشتری هم بدست آوردین

po0ya_jo0n
چهارشنبه 08 اردیبهشت 1389, 12:48 عصر
شما درست میگی کد های اضافی توش هست

دقت نکردم کد رو ویرایش کنم

در مورد فایل Sam :
فایل سم یه فایل توی ویندوز Xp هست که پسوردهای یوزرهای سیستم رو توش ذخیره میکنه

و قابل دسترس نیست (ترفند برای هک فایل Sam زیاده و میشه هک کرد)

فقط میخاستم با جاوا امتحان کنم که جواب نداد

یعنی سورس من تمام فایلهای تکست رو باز میکنه ولی اینو نتونست

روشهایی که شما گفتین رو تست میکنم

بسیار ممنون از پاسخ و راهنمایی های توپتون

:قلب:

jeus
پنج شنبه 09 اردیبهشت 1389, 01:13 صبح
به جای ذخیره کردن این اطلاعات میتونی اینها را توی رجیستری ویندوز ذخیره کنی و پیدا کردن و کنترل کردنشون هم راحت تره و با پلت فرمهای دیگه هم جوره و اگه خواستی روی لینوکس هم ران کنی به راحتی میتونی .


import java.util.prefs.*;

public class Gadget {
// Preference keys for this package
private static final String NUM_ROWS = "num_rows";
private static final String NUM_COLS = "num_cols";

void foo() {
Preferences prefs = Preferences.userNodeForPackage(this);

int numRows = prefs.getInt(NUM_ROWS, 40);
int numCols = prefs.getInt(NUM_COLS, 80);

...
}
}


موفق باشی